Как мне получить mimeData для определенного элемента в QTreeWidget? - PullRequest
1 голос
/ 19 июня 2020

Я пытаюсь программно «сбросить» элемент на QTableWidget, используя QTableWidget::dropMimeData().

Я знаю, какой элемент я хочу удалить, и я знаю, что QTreeWidget имеет функцию QTreeWidget::mimeData(), но я не могу использовать эту функцию mimeData(), потому что она защищена.

В принципе, как я могу «выбрать» QTreeWidgetItem, упаковать его mimeData и «перетащить» этот элемент в QTableWidget программно (без фактического перетаскивания мышью)?

Спасибо.


Что касается фактического кода:

Допустим, у меня есть QTreeWidget с 3 «уровнями»

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

получает мой QTreeWidgetItem.

Теперь предположим, что я хочу программно поместить item на свой QTableWidget.

Мне нужно использовать QTableWidget::dropMimeData(row,col,mimeData,action) (верно?)

Итак, как мне получить mimeData из item (это будет автоматически упаковано из обычного перетаскивания), чтобы я мог поместить его в вызов функции для dropMimeData?

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Я думаю, вы не можете использовать QTableWidget::dropMimeData(row,col,mimeData,action), потому что он защищен.

На мой взгляд, вы можете использовать QVariant QTreeWidgetItem::data(int column, int role) const для получения своего узла дерева. После этого вы можете использовать QTableWidget::setItem(int row, int column, QTableWidgetItem *item) для вставки нового элемента.

Это пример из документации , чтобы показать, как вставить новую строку в таблицу:

QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
        (row+1)*(column+1)));
tableWidget->setItem(row, column, newItem);
0 голосов
/ 19 июня 2020

способ сделать это - событие drop

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