Hello !

Je suis en train de regarder comment faire un drag & drop d'éléments dans un QTreeWidget. Il faut mettre les bonnes options et redéfinir la méthode dropEvent :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
class TreeWidget : public QTreeWidget
{
protected:
 
  virtual void dropEvent(QDropEvent *event) override
  {
    QModelIndex index = indexAt(event->pos());
    if (!index.isValid()) {  // just in case
      event->setDropAction(Qt::IgnoreAction);
      return;
    }
 
    QTreeWidgetItem* item = itemFromIndex(index);
    qDebug() << "drop on item" << item->text(0);
 
    QTreeWidget::dropEvent(event);
  }
};
 
int main()
{
  TreeWidget *listWidget = new TreeWidget;
  listWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  listWidget->setDragEnabled(true);
  listWidget->viewport()->setAcceptDrops(true);
  listWidget->setDropIndicatorShown(true);
  listWidget->setDragDropMode(QAbstractItemView::InternalMove);
}
Mais dans mon cas j'aimerai pouvoir ne bouger que les éléments parents. Dans le code je récupère l'élément d'arrivée (item), mais comment avoir l'élément déplacé ??

Faut-il redéfinir une méthode drag ?? Lancer le drag nous même depuis mousePressEvent ?? Je suis un peu perdu pour faire ça proprement, je ne trouve pas de méthode propre.

Merci.