【问题标题】:Drag and Drop QTreeWidgetItem to QGraphicsView with custom data使用自定义数据将 QTreeWidgetItem 拖放到 QGraphicsView
【发布时间】: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);

QGraphicsSceneScene 子类中的 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,而其他字符串为空。

如何检索我拖入QGraphicsSceneQTreeWidgetItem 的相关信息?

【问题讨论】:

    标签: c++ qt drag-and-drop qgraphicsscene qtreewidget


    【解决方案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();
            }
        }
    }
    

    【讨论】:

    • 谢谢,你拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2019-09-10
    • 2012-08-16
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多