我有一个包含QTreeWidget
的类,其中我有一些QTreeWidgetItem
。
我想把QTreeWidgetItem
拖放到QGraphicsScene
中,以便在那里创建一个对象。对象是一个矩形,里面有QTreeWidgetItem
的文本。
我能够执行拖放操作,并且我有我的dropEvent
虚拟方法来处理它。它接收到删除事件,但是我无法检索到关于原始QTreeWidgetItem
的信息。
这是我用来初始化QTreeWidget
的代码:
m_nodeList = new QTreeWidget(this);
m_nodeList->setColumnCount(2);
m_nodeList->setHeaderLabels({ NameLabel, CategoryLabel });
m_nodeList->setDragEnabled(true);
m_nodeList->setDragDropMode(QAbstractItemView::DragOnly);
QGraphicsScene
的Scene
子类中dropEvent
覆盖的方法如下:
void Scene::dropEvent(QGraphicsSceneDragDropEvent* event) {
event->acceptProposedAction();
for (const auto& it : event->mimeData()->formats()) {
std::string f = it.toStdString();
int i = 0;
}
std::string t = event->mimeData()->text().toStdString();
std::string on = event->mimeData()->objectName().toStdString();
}
f
包含application/x-qabstractitemmodeldatalist
,其他字符串为空。
我如何检索关于我拖到QGraphicsScene
中的QTreeWidgetItem
的信息?
模型的DND使用内部Qt格式,因此一个可能的解决方案是使用dummymodel:
void Scene::dropEvent(QGraphicsSceneDragDropEvent* event) {
event->acceptProposedAction();
if(event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")){
QStandarditemmodel dummy_model;
if(dummy_model.dropMimeData(event->mimeData(), event->dropAction(), 0, 0, QModelIndex()){
QModelIndex index = dummy_model.index(0, 0);
qDebug() << index.data();
}
}
}