使用自定义数据将 QTreeWidgetItem 拖放到 QGraphicsView
Posted
技术标签:
【中文标题】使用自定义数据将 QTreeWidgetItem 拖放到 QGraphicsView【英文标题】:Drag and Drop QTreeWidgetItem to QGraphicsView with custom data 【发布时间】:2021-12-11 05:21:31 【问题描述】:我有一个包含QTreeWidget
的类,其中我有一些QTreeWidgetItem
。
我想将QTreeWidgetItem
拖放到QGraphicsScene
中,以便在其中创建一个对象。该对象是一个矩形,其中包含QTreeWidgetItem
的文本。
我能够执行拖放操作,并且我有我的dropEvent
虚拟方法来处理它。它接收到 drop 事件,但我无法检索有关原始 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
的相关信息?
【问题讨论】:
【参考方案1】:模型的 DND 使用内部 Qt 格式,因此可能的解决方案是使用虚拟模型:
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();
【讨论】:
谢谢,你拯救了我的一天!以上是关于使用自定义数据将 QTreeWidgetItem 拖放到 QGraphicsView的主要内容,如果未能解决你的问题,请参考以下文章
QTreeWidgetItem 不显示默认三角形 && 自定义TreeWidgetItem的widget && 子项Item与顶层TopLevelItem顶端对其-
如何将 itemExpanded 与 QTreeWidgetItem 的子类一起使用