Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何将事件中的自定义数据设置为拖放?_Qt_Drag And Drop_Qlistwidget_Qtreewidget - Fatal编程技术网

Qt 如何将事件中的自定义数据设置为拖放?

Qt 如何将事件中的自定义数据设置为拖放?,qt,drag-and-drop,qlistwidget,qtreewidget,Qt,Drag And Drop,Qlistwidget,Qtreewidget,我有一个listwidget和一个treewidget。 我希望listwidgetitems能够通过拖放在listwidget内移动,我还希望listwidget能够接受从treewidget拖动的项目中进行的拖放,但在此之前,我希望对数据进行一些处理 我现在可以做所有这些事情,但我无法找到如何将自定义数据设置为从treewidget开始的拖动事件 例如,我在我的treewidget中有一个topLevelItem,带有文本Add-DropeEffect和一个QIcon,当我在listwidg

我有一个listwidget和一个treewidget。 我希望listwidgetitems能够通过拖放在listwidget内移动,我还希望listwidget能够接受从treewidget拖动的项目中进行的拖放,但在此之前,我希望对数据进行一些处理

我现在可以做所有这些事情,但我无法找到如何将自定义数据设置为从treewidget开始的拖动事件

例如,我在我的treewidget中有一个topLevelItem,带有文本Add-DropeEffect和一个QIcon,当我在listwidget中拖放时,我想向listwidget添加一个新项目,如下所示:

DrawEffect 0x0x0x0 effect-here
而不是

Add DrawEffect (showing its QIcon as well)
我应该何时设置此数据

到目前为止,这是我的代码,在listwidget内拖放listwidgetitems时可以完全正常工作,在listwidget内拖放qtreewidgetitems时也可以正常工作,但它会按原样复制它们,而我希望在添加它们之前做进一步的处理:

在我的treewidget的构造函数中:

this->setDragDropMode(QAbstractItemView::DragOnly);
this->setDefaultDropAction(Qt::CopyAction);
this->setAcceptDrops(true);
this->setDragDropMode(QAbstractItemView::DragDrop);
this->setDefaultDropAction(Qt::MoveAction);
在我的listwidget的构造函数中:

this->setDragDropMode(QAbstractItemView::DragOnly);
this->setDefaultDropAction(Qt::CopyAction);
this->setAcceptDrops(true);
this->setDragDropMode(QAbstractItemView::DragDrop);
this->setDefaultDropAction(Qt::MoveAction);
重新实现listwidget的dropEvent:

if(event->source()->inherits("QTreeWidget"))
    qDebug() << "The dragged item comes from the TreeWidget.";
else
    qDebug() << "The dragged item comes from the ListWidget itself.";
QListWidget::dropEvent(event);

谢谢:/

如果拖动操作不“包含”项目,它只包含描述该项目的数据。因此,您需要从event->mimeData对象的文本、图标等数据创建一个新项目,并手动将其插入到事件->位置的小部件中。

如果拖动操作不“包含”该项目,它只包含描述该项目的数据。因此,您需要从文本、图标等创建一个新项目。数据来自事件->mimeData对象,并手动将其插入到事件->位置的小部件中。

以回答问题,正如cmannett85所说,当输入拖动时,自动将mime数据添加到拖动事件中。您可以通过覆盖QTableWidget::mimedata来覆盖添加的mimedata。在该方法中,您可以在该位置为项设置一些标识符,例如:行号、列号、索引到某个数据结构中

然后,覆盖列表小部件中的dropMimedata方法以读取您添加的数据并执行插入操作


如cmannett85所述,有关更多详细信息,请参见回答,当输入拖动时,自动将mime数据添加到拖动事件中。您可以通过覆盖QTableWidget::mimedata来覆盖添加的mimedata。在该方法中,您可以在该位置为项设置一些标识符,例如:行号、列号、索引到某个数据结构中

然后,覆盖列表小部件中的dropMimedata方法以读取您添加的数据并执行插入操作


请参阅,了解更多详细信息

非常感谢您的回答。我只对该项目所载的文本感兴趣。但是,正如我所说,我应该在什么时候设置描述我的对象的数据?当我将树小部件项拖放到listwidget中时,所有事件->mimeData->has Text/Image/Html等返回false,但该项包含所有这些。我不知道:这很奇怪,我一直认为它确实包含这些数据。很抱歉,我帮不了你。非常感谢你的回答。我只对该项目所载的文本感兴趣。但是,正如我所说,我应该在什么时候设置描述我的对象的数据?当我将树小部件项拖放到listwidget中时,所有事件->mimeData->has Text/Image/Html等返回false,但该项包含所有这些。我不知道:这很奇怪,我一直认为它确实包含这些数据。很抱歉,我帮不了你。非常感谢你的回答:这正是我想要的:我没有100%得到的是我是否应该在DragEnter事件发生时重新实现mimeData或设置自定义数据。请澄清!:更可取的做法是重新实现mimeData。看看重写drag-enter事件会更痛苦,而且不是正确的方法。对于这个答案,我做了很多讨论:这正是我想要的:我没有100%得到的是,在DragEnter事件发生时,我是应该重新实现mimeData还是设置自定义数据。请澄清!:更可取的做法是重新实现mimeData。看看重写drag-enter事件会更痛苦,而且不是正确的方法