Qt 支援滑鼠拖動來移動內容的視窗

2021-05-25 09:37:28 字數 2002 閱讀 5750

最近有個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主面板,一開啟就在所有軟體之上 比較霸道。設定無邊...