代码之家  ›  专栏  ›  技术社区  ›  Jepessen

使用自定义数据将QTreeWidgetItem拖放到QGraphicsView

  •  0
  • Jepessen  · 技术社区  · 4 年前

    我有一个包含 QTreeWidget QTreeWidgetItem

    我想拖放一个文件 QTreeWidgetItem 变成 QGraphicsScene 在那里。

    我能够执行拖放操作,我的 dropEvent QTreeWidgetItem .

    :

    m_nodeList = new QTreeWidget(this);
    m_nodeList->setColumnCount(2);
    m_nodeList->setHeaderLabels({ NameLabel, CategoryLabel });
    m_nodeList->setDragEnabled(true);
    m_nodeList->setDragDropMode(QAbstractItemView::DragOnly);
    

    这个 在我的 Scene QsCene

    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

    QTreeWidgetItem 我把它拖进了监狱 QsCene ?

    1 回复  |  直到 4 年前
        1
  •  1
  •   eyllanesc    4 年前

    模型的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();
            }
        }
    }