我正在使用QTreeWidget來顯示父節點樹,其中離開 節點。每個父節點可以有不同的葉節點,但葉節點應該沒有 子節點。用戶應該能夠通過將父母 拖到新位置來在父母之間移動葉子。爲了避免葉子落在其他葉子上,我有 只在葉子上設置ItemIsDragEnabled
,而ItemIsDropEnabled
在 父級節點上。如果QTreeWidget設置爲「SingleSelection」,這工作正常。 然而,如果將SelectionMode設置爲ExtendedSelection
你能 選擇休假和父節點一起,把它們都在葉:http://i.stack.imgur.com/Kil3y.jpg(截圖)使用QTreeWidget(Qt4)混合父節點和子節點(Qt4)並拖放'
下面是示例代碼:
QTreeWidget *tree = this->ui->treeWidget;
QTreeWidgetItem *item;
QTreeWidgetItem *child;
tree->setSelectionMode(QAbstractItemView::ExtendedSelection);
tree->setDefaultDropAction(Qt::MoveAction);
tree->setDragEnabled(true);
tree->setAcceptDrops(true);
tree->setDropIndicatorShown(true);
// disable dropping of leaves as top level items
tree->invisibleRootItem()->setFlags(Qt::ItemIsSelectable |
Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
for (int i = 0; i < 2; i++) {
// create top level item
item = new QTreeWidgetItem();
item->setText(0, "parent");
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable
| Qt::ItemIsDropEnabled | Qt::ItemIsEnabled);
// add 3 child items
for (int j = 0; j < 3; j++) {
child = new QTreeWidgetItem();
child->setText(0, "child");
child->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable
| Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
item->addChild(child);
}
// add item to tree
tree->addTopLevelItem(item);
}
我GOOGLE了很多,但不能想出一個解決方案。如何在使用ExtendedSelection
時將孩子和父母節點保持在各自的級別?
我必須 子類QTreeWidget和重寫insertRows()?是否有任何方法可以攔截 在QTreeWidget上拖動操作,以便檢查操作是否正常? (如果 有辦法讓這個與QStandardItemModel/QTreeView則工作,我會 高興的太早)
謝謝,得試試 – nurio