У меня была проблема с вызовом редактора моего listView, когда мышь покинула его. Мне удалось решить мою проблему. Это было не очевидно для меня, поэтому я решил опубликовать свое решение:
В заголовочном файле делегата Ive создал указатель на виджет редактора, а в конструкторе я дал ему значение Q_NULLPTR.
//in header file of Delegate
mutable QWidget *myCustomWidget;
//in the source file of Delegate
MyItemDelegate::MyItemDelegate(QObject *parent) : QStyledItemDelegate(parent),
myCustomWidget(Q_NULLPTR)
{
}
затем в createEditor:
QWidget *MyItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
myCustomWidget= new KontaktForm(parent);
myCustomWidget->autoFillBackground();
return myCustomWidget;
}
в заголовочном файле MyListView я создал сигнал saveToModelFromEditor (); и испустил сигнал в
void MyListView::leaveEvent(QEvent *event)
{
emit saveToModelFromEditor();
QListView::leaveEvent(event);
}
Функция commitData для модели и закрытия редактора, если кто-то хочет, чтобы он закрылся:
void MyItemDelegate::commitAndSaveData()
{
if(kontaktForm!=Q_NULLPTR){
// after testing the UI I've decided, that the editor should remain open, and just commit data
emit commitData(kontaktForm);
// emit closeEditor(kontaktForm);
}
}
Наконец, я использовал механизм сигналов и слотов для подключения сигнала из listView к слоту в редакторе.
connect(treeView,SIGNAL(saveToModelFromEditor()),itemDelegate,SLOT(commitAndSaveData()));
Я получил помощь от другого сообщества (группа VoidRealms facebook).
Надеюсь, это поможет кому-то здесь.
В заголовочном файле делегата Ive создал указатель на виджет редактора, а в конструкторе я дал ему значение Q_NULLPTR.
//in header file of Delegate
mutable QWidget *myCustomWidget;
//in the source file of Delegate
MyItemDelegate::MyItemDelegate(QObject *parent) : QStyledItemDelegate(parent),
myCustomWidget(Q_NULLPTR)
{
}
затем в createEditor:
QWidget *MyItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
myCustomWidget= new KontaktForm(parent);
myCustomWidget->autoFillBackground();
return myCustomWidget;
}
в заголовочном файле MyListView я создал сигнал saveToModelFromEditor (); и испустил сигнал в
void MyListView::leaveEvent(QEvent *event)
{
emit saveToModelFromEditor();
QListView::leaveEvent(event);
}
Функция commitData для модели и закрытия редактора, если кто-то хочет, чтобы он закрылся:
void MyItemDelegate::commitAndSaveData()
{
if(kontaktForm!=Q_NULLPTR){
// after testing the UI I've decided, that the editor should remain open, and just commit data
emit commitData(kontaktForm);
// emit closeEditor(kontaktForm);
}
}
Наконец, я использовал механизм сигналов и слотов для подключения сигнала из listView к слоту в редакторе.
connect(treeView,SIGNAL(saveToModelFromEditor()),itemDelegate,SLOT(commitAndSaveData()));
Я получил помощь от другого сообщества (группа VoidRealms facebook).
Надеюсь, это поможет кому-то здесь.
Других решений пока нет …