最近有個qt的專案碰到問題,問題是這樣的:
要使qt的視窗內容支援drag移動,即按住滑鼠左鍵在視窗裡移動時,視窗的滾動條和內容隨著滑鼠的移動而移動。
實現的方法實現乙個類,此類派生自qscrollarea,安裝事件過濾器,對滑鼠的事件進行處理來實現內容的移動。
**如下:
標頭檔案
#include
class
;
protected
:
bool eventfilter(qobject
*obj,
qevent
*evt);
private
:bool
mmovestart
;bool
mcontinousmove
;qpoint
mmousepoint
;
};
cpp檔案
#include
#include
#include "myscrollarea.h"
myscrollarea::myscrollarea(qwidget
* parent)
: qscrollarea
(parent)
,mmovestart(false)
boolmscscrollarea::eventfilter(qobject*obj,
qevent
*evt)
else
returntrue; }
}elseif(evt->type() == qevent
::mousebuttonrelease)
returnqobject::eventfilter(obj, evt); }
但我在使用過程中發現乙個問題,如果視窗裡的控制項也實現了滑鼠的move或release事件,那麼這時候這2個事件就不會傳到myscrollarea,這樣就會出現bug,但後來找到了解決辦法,就是在控制項的這兩個事件的最後加上一行**,
event->ignore();
這樣就解決了,因為如果是將事件ignore掉的話,此事件還會忘父控制項上傳,這樣的話,每層都ignore掉,最後會傳到myscrollarea裡,這樣myscrollarea也就能正常處理滑鼠事件了。
#include
Qt拖動滑鼠移動窗體中的內容
在qt的窗體中,當顯示的內容比窗體大時,一般會自動出現水平和垂直的滾動條,拖動滾動條就可以使窗體中的內容移動了。但是有時候按照需求當窗體內容比窗體大時,不可以顯示滾動條,要用滑鼠拖動窗體來移動窗體中的內容。首先關閉水平和垂直方向上的滾動條 sethorizontalscrollbarpolicy q...
QT中的滑鼠移動
qt 中對滑鼠事件進行處理,可以在qwidget的子類中繼承 mousemoveevent 函式來實現。protected void mousemoveevent qmouseevent 在建構函式中,需要設定this setmousetracking true 對滑鼠移動進行跟蹤,否則無法捕捉到滑...
Qt 通過滑鼠拖拽,來移動無邊框窗體
設定視窗標誌為無邊框 setwindowflags qt framelesswindowhint windowflags 關於windowflags列舉值很多,其中有乙個windowstaysontophint,可以讓窗體位於所有介面之上,類似於qq主面板,一開啟就在所有軟體之上 比較霸道。設定無邊...