Qt QItemDelegate 提交数据并关闭鼠标上的编辑器离开视图小部件(listView)
Qt QItemDelegate Commit data and close Editor on mouse leave the view widget (listView)
当鼠标离开时,我无法调用 listView 的编辑器。我设法解决了我的问题。这对我来说并不明显,所以我决定 post 我的解决方案:
在委托头文件中我创建了一个编辑器小部件指针,在构造函数中,我给了他值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)
{
}
然后在创建编辑器中:
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);
}
将数据提交到模型并关闭编辑器的函数,如果有人要它关闭:
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 组)的帮助。
希望这对这里的人有所帮助。
在委托头文件中我创建了一个编辑器小部件指针,在构造函数中,我给了他值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)
{
}
然后在创建编辑器中:
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);
}
将数据提交到模型并关闭编辑器的函数,如果有人要它关闭:
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 组)的帮助。
希望这对这里的人有所帮助。
当鼠标离开时,我无法调用 listView 的编辑器。我设法解决了我的问题。这对我来说并不明显,所以我决定 post 我的解决方案:
在委托头文件中我创建了一个编辑器小部件指针,在构造函数中,我给了他值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)
{
}
然后在创建编辑器中:
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);
}
将数据提交到模型并关闭编辑器的函数,如果有人要它关闭:
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 组)的帮助。
希望这对这里的人有所帮助。
在委托头文件中我创建了一个编辑器小部件指针,在构造函数中,我给了他值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)
{
}
然后在创建编辑器中:
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);
}
将数据提交到模型并关闭编辑器的函数,如果有人要它关闭:
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 组)的帮助。
希望这对这里的人有所帮助。