QML的Mouse事件 MouseArea 詳解

2021-07-27 05:17:22 字數 1664 閱讀 7946

在ui應用程式中,我們常常要處理滑鼠事件,乙個mousearea就可以搞定許多事情。mousearea本身是不可見的,主要和一些可見的元素一起使用,先來看一下它有哪些屬性:

pressed:bool型別,當acceptedbuttons中有滑鼠鍵按下時為true。

pressedbuttons:列舉值,儲存了acceptedbuttons中按下的滑鼠鍵。

containsmouse:bool型別,記錄游標是否在當前的mousearea,與hovereabled有關。

hoverenabled:預設false,只有按下滑鼠鍵時才處理滑鼠事件,為true時即使沒有按下滑鼠鍵也會作相應的處理,影響的是containsmouse屬性和onentered()/onexited()/onpositionchanged()訊號。

containspress:bool型別,這個是qt5.4新出現的屬性,效果等同於「pressed && containsmouse」。

enabled:bool型別,預設為true,用來設定當前物件是否響應滑鼠事件,與item元素的enabled屬性不同的是,它只是對滑鼠事件有效,不影響鍵盤事件,也不影響孩子物件。

mou***/mousey:real型別,儲存了游標在當前物件的mousearea中的x、y座標。

preventstealing:bool型別,預設為false,為true時可以防止當前滑鼠事件被其它物件攔截。

propagatecomposedevents:bool型別,預設為false,為true時可以傳遞滑鼠事件。

mousearea有哪些訊號呢?如下:

[plain] view plain copy

canceled()  

clicked(mouseevent mouse)

doubleclicked(mouseevent mouse)

entered()

exited()

positionchanged(mouseevent mouse)

pressandhold(mouseevent mouse)

pressed(mouseevent mouse)

released(mouseevent mouse)

wheel(mouseevent mouse)

這些訊號都比較簡單,不再多說了。

mousearea還有乙個有趣的drag組屬性,可以實現拖拽效果,下面是其屬性介紹:

drag.target:要拖拽物件的id。

drag.active:記錄目標物件是否正在被拖拽。

drag.axis:設定拖拽方向,可以是drag.xaxis/yaxis/xandyaxis。

drag.minimumx/drag.maximumx:設定x方向可拖拽距離。

drag.minimumy/drag.maximumy:設定y方向可拖拽距離。

drag.filterchildren:為true時,滑鼠事件可被父物件接收。

最後,再列舉幾個好玩的ui互動元素。

flickable、flipable可以實現彈動效果,就是乙個小小的動畫。

pincharea可以通過兩點觸控來實現旋轉、縮放效果。

mutipointtoucharea可以實現多點觸控手勢。

drag、droparea也可以實現移動等效果。

mouse事件(demo div塊變大縮小)

小果瀏覽部落格期間,發現乙個很有意思的動畫效果,實在喜歡,於是。效果描述 滑鼠進入 div塊緩慢變大,周圍的div塊隨著變大,幅度稍小 滑鼠移出 div塊緩慢收回,變回原大小 效果圖 靜態圖 滑鼠進入第1個div塊 滑鼠進入第3個div塊 滑鼠進入第5個div塊 實現 css body script...

qml鍵盤事件傳遞順序

由豆子的這篇文章裡面可以知道,widget中事件的傳播是在元件層次上面的,而不是依靠類繼承機制。參考 如下 class custombutton public qpushbutton protected void mousepressevent qmouseevent event class cus...

selenium的滑鼠mouse操作

selenium的滑鼠mouse操作 from selenium import webdriver from selenium.webdriver.common.action chains import actionchains import time driver webdriver.chrome...