QT自定義滑鼠樣式

2021-07-28 02:25:41 字數 1634 閱讀 7107

在qt開發中,難免會遇到想要改變滑鼠的樣式。qt中本身提供十幾種常見的滑鼠樣式:

舉例說明如何更改:

假設顯示乙個label,想要滑鼠落在label上的時候,滑鼠變成手形,**如下:

ui->label->setcursor(qt::openhandcursor);
有時候,這幾種樣式並不能滿足開發的需要。比如開發畫圖工具時,想要使用橡皮擦的時候,希望滑鼠為圓形或正方形。那麼就要自己定義滑鼠的樣式了。我用的辦法比較簡單,就是改變成。

qcursor cursor;

//載入

qpixmap pixmap("erase.png");

//定義大小

qsize picsize(8, 8);

//縮放,按比例

qpixmap scaledpixmap = pixmap.scaled(picsize, qt::keepaspectratio);

//設定樣式

cursor = qcursor(scaledpixmap, -

1, -

1);//更改滑鼠形狀

ui->label->setcursor(cursor);

載入的時候,使用了絕對路徑,那麼要將放在exe的同目錄下。

自動觸發mousemoveevent

下面說一下開發的過程中遇到的問題:

想要滑鼠只要在label上面移動,就出發mousemoveevent(),但是沒有成功。

在qt中要捕捉滑鼠移動事件需要重寫mousemoveevent,但是mousemoveevent為了不太耗資源在預設狀態下是要滑鼠按下才能捕捉到。要想滑鼠不按下時的移動也能捕捉到,需要

ui->label->setmousetracking(true);
setmousetracking(bool mousetracking)

qwidget中這樣使用是沒有問題的,但是,對於qmainwindow即使使用了setmousetracking(true)依然無法捕捉到滑鼠沒有按下的移動,只有在滑鼠按下是才能捕捉。

解決辦法:

先把qmainwindow的centrolwidget使用setmousetracking(true)開啟移動監視。然後在把qmainwindow的setmousetracking(true)開啟監視。

原因:

centrolwidget是qmainwindow的子類,你如果在子類上響應滑鼠事件,只會觸發子類的mousemoveevent,根據c++繼承和過載的原理,所以子類也要setmousetracking(true); 所以如果你想響應滑鼠事件的控制項被某個父控制項包含,則該控制項及其父控制項或容器也需要setmousetracking(true);

但是我使用:

ui->centralwidget->setmousetracking(true);

this->setmousetracking(true);

沒有解決問題。最終沒有找到如何解決/(ㄒoㄒ)/~~

滑鼠自定義樣式

滑鼠自定義樣式,在網上查了查,現在把找到的覺得不錯的方法展示如下 1 bitmap cursor bitmap bitmap.fromfile 20050129171521936.gif 括號內填寫本地路徑 bitmap mynewcursor new bitmap cursor.width 2,c...

自定義滑鼠樣式

寫正文之前總喜歡說幾句廢話,其實本人的部落格上的問題一般都是在工作當中遇見的,為了避免忘記,還是寫出來的好點!都是細節部分,雖然幾乎沒人看!就當自己的筆記,便於以後查詢!嘻嘻。這個也是產品的乙個要求,要求切換指令碼,放在大圖中會有乙個放大鏡的效果出來。腦子一轉,放大鏡,直接把滑鼠樣式換成放大鏡的不就...

WPF 自定義滑鼠樣式

this class allow you create a cursor form a bitmap internal class bitmapcursor safehandle public static cursor createbmpcursor bitmap cursorbitmap pub...