使用自定义数据将 QTreeWidgetItem 拖放到 QGraphicsView
Drag and Drop QTreeWidgetItem to QGraphicsView with custom data
我有一个 class 包含一个 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
subclass 中的 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 格式,因此可能的解决方案是使用虚拟模型:
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();
}
}
}
我有一个 class 包含一个 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
subclass 中的 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 格式,因此可能的解决方案是使用虚拟模型:
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();
}
}
}