我有一個包含 的類QTreeWidget,在那里我有一些QTreeWidgetItem.
我想將 a 拖放QTreeWidgetItem到 a 中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);
dropEvent我的Scene子類中的重寫方法QGraphicsScene如下:
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();
}
fcontains application/x-qabstractitemmodeldatalist,而其他字串為空。
如何檢索有關QTreeWidgetItem我已拖入的 的資訊QGraphicsScene?
uj5u.com熱心網友回復:
模型的 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();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337946.html
