如何检索 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);
我正在尝试使用 QTableWidget::dropMimeData().
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);