2013-11-15 76 views

回答

2

您必須使用QDrag*對象。 然後重新實現:

virtual void mousePressEvent(QMouseEvent * event); 
virtual void mouseReleaseEvent(QMouseEvent * event); 
virtual void mouseMoveEvent(QMouseEvent *event); 

(拖動開始的地方),你會管理的起點(在那裏你放下小部件)的事件和結束點內。您還將使用MIME協議來允許框架管理拖放操作。

上拖放

一個更有用的文章是這樣的:Drag 'n drop

0

我想最簡單的方法是創建eventFilter類,在該類中將拖放事件和install它(someWidget->installEventFilter)過濾到您想要拖放的所有小部件。從文檔實例 - here

更新:

與eventfilter的事情是,你並不需要繼承所有小組件讓他們有拖放。只需在你想要過濾的任何小部件上安裝過濾器,它就會擁有它。

至於過濾器本身,它並不總是阻止事件等(它會這樣做,如果這是你的意圖)。這僅僅是人們如何使用它的例子。

只是拖放的無數選項之一:在dropEvent,dragMoveEvent,dragEnterEvent您的過濾器將可能記住指向你想要放棄的指針,並在dropEvent與對象發出信號,該事件持有指針並抓住它小部件放在哪裏,就是這樣,任何安裝了過濾器的小部件都會有拖放。

事件過濾器的全部重點不在於繼承和連接每個單獨的小部件,如果您有公共事件類型,您希望以類似的方式捕獲和處理,例如拖放事件。

我認爲你知道如何拖放,但是認爲用相同的代碼重寫所有小部件的重寫事件可能是不對的。所以我向你展示瞭如何使用一個eventfilter輕鬆完成所有想要拖放的小部件。

+0

從我可以從你的鏈接瞭解,eventFilter是可以阻止事件或將其轉發到該對象的類。我不需要那個。我可以連接信號和插槽和/或子類小部件並覆蓋方法。問題是我必須連接/重寫/等,使其工作,並有一些標準,測試和方便的方式做到這一點。 – alkedr

+0

@alkedr好的,我已經更新了eventfilter背後的原因 – Shf