2015-05-29 34 views
1

我有一個QTreeWidget,我啓用了拖放功能。儘管我希望用戶能夠在樹內拖放項目,但我不希望他們拖放頂層的任何拖動項目。我怎樣才能做到這一點 ?QTreeWidget - 禁用頂層刪除

比方說,我有預定義的類別是頂級項目,我不想擴展該列表。但是在較低級別中,用戶可以創建任意數量的物品,並且她/他也可以移動這些物品。

+0

沒有檢查我猜你至少需要從QTreeView繼承。我從來沒有嘗試過。嘗試過濾selectedIndexes()並對普通的拖動事件做出反應(http://doc.qt.io/qt-5/examples-draganddrop.html) –

+0

嘗試使用'QTreeWidget :: invisibleRootItem'來獲取root項並禁用' Qt :: ItemIsDropEnabled'標誌。如果這不起作用,則重新實現樹部件的'dropMimeData';如果父項爲空或不可見的根項目,則阻止刪除。 –

+1

對於這樣的請求,使用'QStandardItemModel' +'QTreeView'會容易得多。 –

回答

1

感謝您的幫助。有效。

MyTreeWidget::MyTreeWidget(QWidget* aParent /*= nullptr*/) 
: QTreeWidget(aParent) 
{ 
// ... 
    auto rooItem = invisibleRootItem(); 
    rooItem->setFlags(rooItem->flags()^Qt::ItemIsDropEnabled); 
} 
+0

謝謝工作! :) – RandomGuy