比方說,我們有以下層次:交換就拖QTreeView則項目和拖放操作
+ A
|-- B
|-- D
|-- C
而且假設用戶拖動下向B.是否有可能有兩個節點(包括兒童)替換爲該拖放操作的結果?
+ A
|-- C
|-- B
|-- D
我試過多種方法:從子類的項目模型(dropMimeData
,insertRows
等),以調整模式與setDragDropOverwriteMode
和DragDropMode::InternalMove
,以繼承dropEvent(QDropEvent * e)
並沒有什麼至今工作。
我遇到以下趙彤限制:
QStandardItemModel::dropMimeData
和QTreeview::dropEvent
不會讓你知道源指標,他們向前MIME數據,而且也沒有辦法獲取源的QModelIndex執行交換。DragDropMode::InternalMove
和setDragDropOverwriteMode
方法不按預期工作,源節點以某種方式被追加到放置目標節點,並且源節點被刪除。如果設置了DragDropMode::Copy
,則會保留源節點,但目標節點也不會被覆蓋。
向正確的方向微調將不勝感激。
This Works!雖然它沒有回答如何進行實際交換的問題。我一直在嘗試使用'QStandardItemModel :: takeItem',當你嘗試執行交換時,QModelIndex會被破壞。更不用說如何處理子節點。 – voodooattack
這部分很容易看到更新。 –
雖然這是Qt5。 – voodooattack