単一のルート ノードと 1 レベルの子ノードのみを表示する QTreeWidget があります。子ノードの並べ替えを許可する必要があります。彼らは決して再親になってはいけません。
これは、 QTreeWidget でアイテムのドラッグを有効にする方法です:
ui->levelElements->setSelectionMode(QAbstractItemView::SingleSelection);
ui->levelElements->setDragEnabled(true);
ui->levelElements->viewport()->setAcceptDrops(true);
ui->levelElements->setDropIndicatorShown(true);
ui->levelElements->setDragDropMode(QAbstractItemView::InternalMove);
ルート項目は次のように挿入されます:
pItem = new QTreeWidgetItem(ui->levelElements);
pItem->setText(0, node.firstChild().nodeValue());
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled);
ビューに子を挿入すると、次のように宣言されます。
pItem = new QTreeWidgetItem();
pItem->setText(0, strFileName);
pItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
pTreeRoot->addChild(pItem);
この時点で、子アイテムをドラッグして、子アイテムのリストに「再挿入」できます。ルート レベルに移動することもできますが、これは望ましくありません。
QT Creator v3 を使用しているため、QTreeWidget は UI 定義ファイル内にあります。
ここで何か見逃しましたか?