QT的qml中鼠標信號

MouseArea元素的一個很典型的用法是和一個可視的item一起用,處理這個item的鼠標響應。
在下例中我們將MouseArea放到Rectangle中,當單擊Rectangle區域中時,Rectangle顏色會變成紅色。
import Qt 4.7

Rectangle {
width: 100; height: 100
color: “green”

 MouseArea {
     anchors.fill: parent
     onClicked: { parent.color = 'red' }
 }

}
很多時候,MouseArea區域會傳遞一個鼠標事件作爲參數,這個參數中包含了很多鼠標事件信息,例如,
單擊的位置,具體按下的一個鼠標左鍵還是右鍵,以及一些鍵盤按鍵信息。在下面的例子中,當Rectangle
區域被右鍵單擊時會觸發改變顏色。
Rectangle {
width: 100; height: 100
color: “green”

 MouseArea {
     anchors.fill: parent
     acceptedButtons: Qt.LeftButton | Qt.RightButton
     onClicked: {
         if (mouse.button == Qt.RightButton)
             parent.color = 'blue';
         else
             parent.color = 'red';
     }
 }

}
對於其他鍵盤按鍵的處理,請參考Keys元素的介紹。
MouseArea是一個可見的item,但它本身並不顯示什麼。

屬性
acceptedButtons : Qt::MouseButtons
表示MouseArea響應的鼠標按鍵。可取的值有以下三個:
Qt.LeftButton
Qt.RightButton
Qt.MiddleButton
默認值是Qt.LeftButton。acceptButtons屬性還可以接受以上三個值的或組合形式,如下例所示:
MouseArea { acceptedButtons: Qt.LeftButton | Qt.RightButton }

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 {
id: container
width: 600; height: 200

 Rectangle {
     id: rect
     width: 50; height: 50
     color: "red"
     opacity: (600.0 - rect.x) / 600

     MouseArea {
         anchors.fill: parent
         drag.target: rect
         drag.axis: Drag.XAxis
         drag.minimumX: 0
         drag.maximumX: container.width - rect.width
     }
 }

}

enabled : bool
enabled屬性表示item是否接受鼠標事件。默認爲真,即接受鼠標事件。

hoverEnabled : bool
hoverEnabled屬性表明是否處理鼠標懸停事件。
默認情況下,只處理鼠標的按鍵事件。如果hoverEnabled屬性爲真則所有的鼠標事件都會被處理,
即使鼠標沒有被按下。這個屬性影響containMouse屬性,onEntered,onExited以及onPositionChanged信號。

mouseX : real 只讀屬性
mouseY : real 只讀屬性
mouseX和mouseY屬性是當前鼠標的位置。如果hoverEnabled屬性爲假則只有當鼠標按下時,mouseX和mouseY屬性
纔有效。如果hoverEnabled屬性爲真,則mouseX和mouseY只在下面兩種情況下才有效:

  1. 沒有鼠標按下,但鼠標在MouseArea(containsMouse爲真)。
  2. 鼠標按下並按住,即使鼠標已經移動到MouseArea之外。
    mouseX和mouseY是相對於MouseArea的座標。

pressed : bool 只讀
pressed屬性表明當前MouseArea是否按下。

pressedButtons : MouseButtons 只讀
顧名思義,pressedButtons表示當前按下的鼠標是哪個鍵,具體取值如下:
Qt.LeftButton
Qt.RightButton
Qt.MiddleButton
下面的例子中,當單擊鼠標右鍵時會顯示字符“right”。
Text {
text: mouseArea.pressedButtons & Qt.RightButton ? “right” : “”
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter

 MouseArea {
     id: mouseArea
     anchors.fill: parent
     acceptedButtons: Qt.LeftButton | Qt.RightButton
 }

}

信號
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屬性會被忽略不做處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章