我有一个列表小部件和一个树小部件。我希望 listwidgetitems 能够通过拖放在 listwidget 内移动,并且我还希望 listwidget 接受从 treewidget 中拖放的项目,但在此之前,我想对数据进行一些处理。
我现在可以做所有这些事情,但我不知道如何从树小部件开始将自定义数据设置为拖动事件。
例如,我的 treewidget 中有一个 topLevelItem,带有文本“Add DrawEffect”和一个 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的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);
如您所见,我可以区分 treewidget 和 listwidget 项目,但我不知道在此之后该怎么做......
我想这样的事情就可以了:
if(event->source()->inherits("QTreeWidget")){
//treewidget item, it needs further processing
}
else
QListWidget::dropEvent(event); //listwidget item, no further processing needed
谢谢 :/