歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在Qt的Model/View框架中實現Drag-Drop操作

在Qt的Model/View框架中實現Drag-Drop操作

日期:2017/3/1 10:27:33   编辑:Linux編程

QT的Model/View結構為我們實現各種界面提供了很大的靈活性,同時也比較方便。在這個框架中也支持Drag and Drop的操作,需要實現QAbstractItemModel類的幾個虛函數就可以,在QT文檔的”Using Drag and Drop with Item Views“中有介紹,但似乎看起來不夠明確,我根據自己的實際經驗總結一下記錄於此。

首先要給對應的View設置dragDropMode屬性,根據實際情況可以是DragOnly, DropOnly, DragDrop, InternalMove幾種,如果沒有設置是無法實現DragDrop操作的。其次就是對相應的數據模型類(QAbstractItemModel繼承類)實現相關的虛函數即可。

Drag and Drop操作實際上分兩步,兩步是單獨實現的。

一、Drag操作需要實現的方法:

1. 在flags函數中, 對允許執行Drag操作的項(item),需要返回 Qt::ItemIsDragEnabled屬性,這樣這些項目才可以被執行Drag操作;

2. 需要實現mimeData方法,將所執行Drag操作的數據打包,封裝為一個數據對象(QMimeData)。這個對象由接收Drop操作的對象使用。

二、Drop對象需要實現的方法:

1. 同樣在flags函數中,對允許執行Drop操作的項,需要返回Qt::ItemIsDropEnabled屬性。

2. 需要實現mimeTypes函數,這個函數要返回當前數據模型允許接收的數據類型列表,它會在Drag操作過程中被調用,如果Drag操作所包含的對象(第一部分中mimeData方法返回的數據對象)沒有相關類型的數據,就不允許執行Drop操作。

3. 實現dropMimeData方法。這個方法主要在drop操作後解析數據並添加到當前模型的合適位置。

按照上述的方法就可以實現基本的Drag and Drop操作,當然還有其他一些更高級的功能,像dropActions,dragActions等等,就由您自己去探索發現吧。

Copyright © Linux教程網 All Rights Reserved