QML中MouseArea元素的介紹

2021-09-08 04:15:50 字數 3956 閱讀 5630

原文:

mousearea元素的乙個很典型的用法是和乙個可視的item一起用,處理這個item的滑鼠響應。

在下例中我們將mousearea放到rectangle中,當單擊rectangle區域中時,rectangle顏色會變成紅色。

import qt 4.7

rectangle }}

很多時候,mousearea區域會傳遞乙個滑鼠事件作為引數,這個引數中包含了很多滑鼠事件資訊,例如,

單擊的位置,具體按下的乙個滑鼠左鍵還是右鍵,以及一些鍵盤按鍵資訊。在下面的例子中,當rectangle

區域被右鍵單擊時會觸發改變顏色。

rectangle }}

對於其他鍵盤按鍵的處理,請參考keys元素的介紹。

mousearea是乙個可見的item,但它本身並不顯示什麼。

屬性acceptedbuttons : qt::mousebuttons

表示mousearea響應的滑鼠按鍵。可取的值有以下三個:

qt.leftbutton

qt.rightbutton

qt.middlebutton

預設值是qt.leftbutton。acceptbuttons屬性還可以接受以上三個值的或組合形式,如下例所示:

mousearea

containsmouse : bool 唯讀

containsmouse屬性用來表明當前的滑鼠是否在mousearea中。

注意如果當前滑鼠時mousearea中,此時如果移動mousearea,這個屬性不會自動更新,也就是說

containsmouse屬性值不會改變。另外如果hoverenabled為假,只有當滑鼠被單擊時containsmouse

才是正確的。

drag.target : item

read-onlydrag.active : bool

drag.axis : enumeration

drag.minimumx : real

drag.maximumx : real

drag.minimumy : real

drag.maximumy : real

drag.filterchildren : bool

drag屬性集讓item拖動變得很方便。其中drag.target用來指明可以拖動的目標item的id,

drag.active表明目標item當前是否正在被拖動。drag.axis用來說明是否可以水平拖動(drag.xaxis)

或是垂直拖動(drag.xaxis)或是兩者(drag.xandyaxis)都允許。drag.minimum和drag.maximum用來

指明可以拖動的最小和最大距離。下面的例子中,rectangle可以沿著x軸拖動。當拖動到右邊的時候

rectangle的透明度會降低。

rectangle }}

enabled : bool

enabled屬性表示item是否接受滑鼠事件。預設為真,即接受滑鼠事件。

hoverenabled : bool

hoverenabled屬性表明是否處理滑鼠懸停事件。

預設情況下,只處理滑鼠的按鍵事件。如果hoverenabled屬性為真則所有的滑鼠事件都會被處理,

即使滑鼠沒有被按下。這個屬性影響containmouse屬性,onentered,onexited以及onpositionchanged訊號。

mou*** : real 唯讀屬性

mousey : real 唯讀屬性

mou***和mousey屬性是當前滑鼠的位置。如果hoverenabled屬性為假則只有當滑鼠按下時,mou***和mousey屬性

才有效。如果hoverenabled屬性為真,則mou***和mousey只在下面兩種情況下才有效:

1.    沒有滑鼠按下,但滑鼠在mousearea(containsmouse為真)。

2.    滑鼠按下並按住,即使滑鼠已經移動到mousearea之外。

mou***和mousey是相對於mousearea的座標。

pressed : bool 唯讀

pressed屬性表明當前mousearea是否按下。

pressedbuttons : mousebuttons 唯讀

顧名思義,pressedbuttons表示當前按下的滑鼠是哪個鍵,具體取值如下:

qt.leftbutton

qt.rightbutton

qt.middlebutton

下面的例子中,當單擊滑鼠右鍵時會顯示字元「right」。

text }訊號

mousearea::oncanceled ()

當滑鼠事件沒有被接受或是被其他元素截獲時,mousearea::oncanceled()會被呼叫。當有多個mousearea處理輸入時

或是flickable元素中包含乙個mousearea時,mousearea::oncanceled()會顯得特別重要。如果在flickable元素中包

含乙個mousearea時,當執行一些針對於按下訊號的邏輯處理然後又拖動滑鼠時,flickable會從mousearea中截獲滑鼠

事件。在這種情況下,當flickable截獲了mousearea的滑鼠事件時需要重置邏輯。

mousearea::onclicked ( mouseevent mouse )

當有單擊事件(在mousearea中按下緊接著彈起)發生時,mousearea::onclicked方法會被呼叫。

mousearea::ondoubleclicked ( mouseevent mouse )

當有雙擊事件(按下緊接著彈起然後再按下)發生時呼叫。在mousearea::ondoubleclicked中如果將accepted屬性設定

為假,則在第二次單擊時onpressed、onreleased、onclicked仍會被呼叫,否則在第二次單擊時onpressed、onreleased、

onclicked不會被呼叫。

mousearea::onentered ()

當滑鼠進入mousearea中時,mousearea::onentered()會被呼叫。預設情況下,只有當滑鼠在mousearea中單擊時才會呼叫,

可如果將hoverenabled設定為真,當滑鼠拖動至mousearea時也會呼叫onentered();

mousearea::onexited ()

當滑鼠離開mousearea中時,mousearea:: onexited ()會被呼叫。預設情況下,只有當滑鼠在mousearea中單擊時才會呼叫,

可如果將hoverenabled設定為真,當滑鼠拖動至mousearea時也會呼叫onexited ();

mousearea::onpositionchanged ( mouseevent mouse )

當滑鼠位置發生改變時會呼叫onpositionchanged,在這個方法中不會考慮mouseevent引數的accepted屬性,也就是說所有的

滑鼠事件在這裡都會被處理,並不會因為某個滑鼠事件被拒絕了而不做處理。預設情況下,只有在滑鼠按下時才會呼叫onpositionchanged。

不過如果將hoverenabled設定為真,當滑鼠移動時onpositionchanged也會被呼叫。

mousearea::onpressed ( mouseevent mouse )

當有滑鼠按下時onpressed會被呼叫。mouseevent型別的引數提供有關按下時的滑鼠資訊,包括滑鼠的位置以及按下時對應的滑鼠按鍵。

引數mouse的accepted屬性決定了mousearea是否要處理這個滑鼠事件。如果mouse的accept屬性被設定為假則直到下乙個按下事件發生,

這這間任何滑鼠事件都不會傳送給mousearea。

mousearea::onreleased ( mouseevent mouse )

當有滑鼠彈起時會呼叫onreleased。mouseevent型別的引數提供有關按下時的滑鼠資訊,包括滑鼠的位置以及按下時對應的滑鼠按鍵。

引數mouse的accepted屬性會被忽略不做處理。

QML中MouseArea元素的介紹

原文 mousearea元素的乙個很典型的用法是和乙個可視的item一起用,處理這個item的滑鼠響應。在下例中我們將mousearea放到rectangle中,當單擊rectangle區域中時,rectangle顏色會變成紅色。import qt 4.7 rectangle 很多時候,mousea...

QML的Mouse事件 MouseArea 詳解

在ui應用程式中,我們常常要處理滑鼠事件,乙個mousearea就可以搞定許多事情。mousearea本身是不可見的,主要和一些可見的元素一起使用,先來看一下它有哪些屬性 pressed bool型別,當acceptedbuttons中有滑鼠鍵按下時為true。pressedbuttons 列舉值,...

QML元素布局

屬性 用法add 1.當有元素被新增到定位器內且是該定位器的子元素時或有元素變成定位器的子元素時會執行該過渡動畫 2,當該定位器有子元素的屬性item visible由false轉變為true時,會執行該過渡動畫 toppadding bottompadding leftpadding rightp...