【问题标题】:How do I retrieve the mimeData for a particular item in a QTreeWidget?如何检索 QTreeWidget 中特定项目的 mimeData?
【发布时间】:2020-06-19 18:41:32
【问题描述】:

我正在尝试使用 QTableWidget::dropMimeData(). 以编程方式将项目“拖放”到 QTableWidget

我知道我要删除哪个项目,我知道QTreeWidget 有一个QTreeWidget::mimeData() 函数,但我不能使用那个mimeData() 函数,因为它受到保护。

基本上,我怎样才能“选择”一个 QTreeWidgetItem,打包它的 mimeData,然后以编程方式将该项目“拖放”到 QTableWidget 上(没有实际的鼠标拖放)?

谢谢。


就实际代码而言:

假设我有一个具有 3 个“级别”的 QTreeWidget

   QTreeWidgetItem *item = ui->treeWidget->child(i)->child(j)->child(k);

得到我的 QTreeWidgetItem。

现在假设我想以编程方式将item 放到我的 QTableWidget 上。

我需要使用QTableWidget::dropMimeData(row,col,mimeData,action)(对吗?)

那么我如何从item 获取mimeData(这将是从正常拖动中自动打包的),以便我可以将它放入dropMimeData 的函数调用中?

【问题讨论】:

  • 我无法帮助您,因为我不知道您的代码是什么。你手中有什么,你希望最终状态如何?
  • 请参阅我的问题底部的新部分。实际上没有为这部分程序编写太多代码。我尝试了几种不同的方法,但我发现最接近的是来自 QTreeWidget 的 mimeData 函数(它是受保护的,所以我不能从我的班级访问/使用它)。

标签: c++ qt qtreewidget qtreewidgetitem


【解决方案1】:

我认为您不能使用 QTableWidget::dropMimeData(row,col,mimeData,action),因为它受到保护。

在我看来,您可以使用QVariant QTreeWidgetItem::data(int column, int role) const 来获取您的树节点。之后,您可以使用QTableWidget::setItem(int row, int column, QTableWidgetItem *item) 插入一个新项目。

这是来自documentation 的示例,用于展示如何在表格中插入新行:

QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
        (row+1)*(column+1)));
tableWidget->setItem(row, column, newItem);

【讨论】:

  • 将数据从QTreeWidgetItem 复制到QTableWidgetItem,然后手动将该项目添加到QTableWidget,这就是我最终的做法。我仍然认为应该有一种从项目中检索 mimeData 的方法。为什么不提供getMimeData 功能以方便使用?哦,好的,谢谢。
【解决方案2】:

这样做的方法是在 drop 事件中

 void MyWidget::dropEvent(QDropEvent* e)
 {
      const QMimeData* mimeData = e->mimeData();
      ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 2011-09-14
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2014-05-11
    相关资源
    最近更新 更多