在UI應(yīng)用程序中,我們常常要處理鼠標(biāo)事件,一個MouseArea就可以搞定許多事情我注。MouseArea本身是不可見的,主要和一些可見的元素一起使用迟隅,先來看一下它有哪些屬性:
acceptedButtons:Qt::MouseButtons枚舉類型但骨,默認為Qt.leftButton,用來設(shè)置有效的鼠標(biāo)按鍵智袭,支持按位與“|”操作符奔缠,具體按鍵類型可參考——
http://doc.qt.io/qt-5/qt.html#MouseButton-enum
pressed:bool類型,當(dāng)acceptedButtons中有鼠標(biāo)鍵按下時為true吼野。
pressedButtons:枚舉值校哎,保存了acceptedButtons中按下的鼠標(biāo)鍵。
containsMouse:bool類型瞳步,記錄光標(biāo)是否在當(dāng)前的MouseArea闷哆,與hoverEabled有關(guān)。
hoverEnabled:默認false谚攒,只有按下鼠標(biāo)鍵時才處理鼠標(biāo)事件阳准,為true時即使沒有按下鼠標(biāo)鍵也會作相應(yīng)的處理,影響的是containsMouse屬性和onEntered()/onExited()/onPositionChanged()信號馏臭。
containsPress:bool類型野蝇,這個是Qt5.4新出現(xiàn)的屬性讼稚,效果等同于“pressed && containsMouse”。
cursorShape:Qt::CursorShape枚舉類型绕沈,默認是Qt.ArrowCursor锐想,用來設(shè)置光標(biāo)形狀,具體類型可參考——
http://doc.qt.io/qt-5/qt.html#CursorShape-enum
enabled:bool類型乍狐,默認為true赠摇,用來設(shè)置當(dāng)前對象是否響應(yīng)鼠標(biāo)事件,與Item元素的enabled屬性不同的是浅蚪,它只是對鼠標(biāo)事件有效藕帜,不影響鍵盤事件,也不影響孩子對象惜傲。
mouseX/mouseY:real類型洽故,保存了光標(biāo)在當(dāng)前對象的MouseArea中的X、Y坐標(biāo)盗誊。
preventStealing:bool類型时甚,默認為false,為true時可以防止當(dāng)前鼠標(biāo)事件被其它對象攔截哈踱。
propagateComposedEvents:bool類型荒适,默認為false,為true時可以傳遞鼠標(biāo)事件开镣。
MouseArea有哪些信號呢刀诬?如下:
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組屬性舅列,可以實現(xiàn)拖拽效果,下面是其屬性介紹:
drag.target:要拖拽對象的id卧蜓。
drag.active:記錄目標(biāo)對象是否正在被拖拽。
drag.axis:設(shè)置拖拽方向把敞,可以是Drag.XAxis/YAxis/XAndYAxis弥奸。
drag.minimumX/drag.maximumX:設(shè)置X方向可拖拽距離。
drag.minimumY/drag.maximumY:設(shè)置Y方向可拖拽距離奋早。
drag.filterChildren:為true時盛霎,鼠標(biāo)事件可被父對象接收。
drag.threshold:像素閾值耽装,平臺相關(guān)愤炸。
最后,再列舉幾個好玩的UI交互元素掉奄。
Flickable规个、Flipable可以實現(xiàn)彈動效果,就是一個小小的動畫。
PinchArea可以通過兩點觸摸來實現(xiàn)旋轉(zhuǎn)诞仓、縮放效果缤苫。
MutiPointTouchArea可以實現(xiàn)多點觸摸手勢。
Drag墅拭、DropArea也可以實現(xiàn)移動等效果活玲。