[英]Swap QTreeView items on drag and drop operation
假設我們有以下層次結構:
+ A
|-- B
|-- D
|-- C
並且假設用戶將C拖到B.是否可以將這兩個節點(包括子節點)作為拖放操作的結果進行交換?
+ A
|-- C
|-- B
|-- D
我嘗試了多種方法:從子類化項目模型( dropMimeData
, insertRows
等)到使用setDragDropOverwriteMode
和DragDropMode::InternalMove
調整模式, setDragDropOverwriteMode
dropEvent(QDropEvent * e)
並且到目前為止沒有任何工作。
我遇到了以下技術限制:
QStandardItemModel::dropMimeData
和QTreeview::dropEvent
不會讓你知道源索引,它們轉發mime數據,並且無法獲得源的QModelIndex來執行交換。
DragDropMode::InternalMove
和setDragDropOverwriteMode
方法無法按預期工作,源節點以某種方式附加到放置目標節點,並刪除源節點。 如果設置DragDropMode::Copy
,則會保留源節點,但也不會覆蓋目標節點。
向正確的方向輕推將是值得贊賞的。
我檢查了Qt的源代碼,結果發現要獲取源索引你應該使用當前選擇。 因此,通過調用selectedIndexes()來覆蓋QTreeview::dropEvent
並獲取當前選擇。
如果您有自己的自定義模型,則必須直接對數據進行操作,並發出有關移動項目的正確信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.