如何检索 QTreeWidget 中特定项目的 mimeData?

How do I retrieve the mimeData for a particular item in a QTreeWidget?

我正在尝试使用 QTableWidget::dropMimeData().

以编程方式 "drop" 将项目添加到 QTableWidget

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

基本上,我怎样才能 "select" QTreeWidgetItem,打包它的 mimeData,然后 "drop" 那个项目以编程方式放到 QTableWidget 上(没有真正的鼠标 drag/drop)?

谢谢。


就实际代码而言:

假设我有一个带有 3 个 "levels"

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

获取我的 QTreeWidgetItem。

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

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

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

方法是在掉落事件中

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

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

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

这是 documentation 中的示例,用于说明如何将新行插入 table:

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