拖放是應用程式內或者多個應用程式之間傳遞資訊的一種直觀的操作方式。除了為剪貼簿提供支援之外,通常還提供資料的移動和複製功能。
拖放操作包括兩個截然不同的動作:拖動、放下。qt視窗部件可以作為拖動點(drag site)、放下點(drop site)或者同時作為拖動點和放下點。
下面介紹如何讓乙個qt應用程式接收乙個拖動操作,當使用者從桌面或者檔案資源管理器中拖動乙個檔案到這個應用程式上放下時,該應用程式就會將檔案的資訊顯示出來。
class tabelview : public qtableview;
tabelview::tabelview(qwidget *parent)以上通過自定義qtableview來實現拖放事件,首先需要設定setacceptdrops(true)來接受放下事件,通過設定setdropindicatorshown(true)則可以清晰地看到放下過程中的圖示指示。然後實現dragenterevent()、dropevent()方法,當使用者把乙個物件拖動到這個窗體上時,就會呼叫dragenterevent(),如果對這個事件呼叫acceptproposedaction(),就表明可以在這個窗體上拖放物件。預設情況下視窗部件是不接受拖動的。qt會自動改變游標向使用者說明這個視窗部件不是有效的放下點。: qtableview(parent)
void tabelview::dragenterevent(qdragenterevent *event)
我們希望使用者拖放的只能是檔案,而非其他型別的東西。為了實現這一點,可以檢查拖動的mime型別。mime型別中text/uri-list用於儲存統一資源識別符號(uri),它們可以是檔名、統一資源定位器(url,如:http、ftp路徑)或者其它全域性資源識別符號。標準的mime型別由國際網際網路位址分配委員會(iana)定義的,它們由型別、子型別資訊以及分割兩者的斜線組成。mime類通常由剪貼簿和拖放系統使用,以識別不同型別的資料。可以從下面的**得到正式的mime型別列表:media types。
void tabelview::dropevent(qdropevent *event)當使用者在視窗部件上放下乙個物件時,就會呼叫dropevent()。我們呼叫函式qmimedata::urls()來獲得qurl列表。通常,使用者一次只拖動乙個選擇區域來同時拖動多個檔案也是可能的,如果要拖放的url不止乙個,或者要拖放的url不是乙個本地檔名,則會立即返回到原呼叫處。}
void tabelview::dragmoveevent(qdragmoveevent *event)qwidget也提供了dragmoveevent()和dragleveevent()函式,但是絕大多數情況下並不需要重新實現,上面簡單實現了dragmoveevent()函式。
效果如下:
QT4 拖放檔案
1 首先是在標頭檔案中新增2個拖拽事件 void dragenterevent qdragenterevent event void dropevent qdropevent event 2 函式的的具體操作2.1 當拖動等檔案進入到mainwindow區域時,就會觸發dragenterevent事...
QT學習筆記 拖放操作
qt具備強大的拖放機制。拖放操作分為drag 拖動 和drop 放下 跟拖放相關的類是qdragenterevent,也是繼承自qevent 當資料被拖動會被儲存為mime型別的資料。qt使用qmimedata類表示mime 拖動事件 virtual protected void qwidget d...
用 QT實現拖放(drag drop)功能
qt的 qdrag 和 qdrop功能在qt的 puzzle 示例中有介紹。但是那個介紹是以qlistwidget為基礎的。本文以qwidget為基礎,介紹如何實現拖放。拖放可以用qstring作為資訊載體,也可以使用html等型別。本文採用qbytearray。qbytearray允許程式設計師使...