在UI應用程序中,我們常常要處理鼠標事件,一個MouseArea就可以搞定許多事情。MouseArea本身是不可見的,主要和一些可見的元素一起使用,先來看一下它有哪些屬性:
acceptedButtons:Qt::MouseButtons枚舉類型,默認為Qt.leftButton,用來設置有效的鼠標按鍵,支持按位與“|”操作符,具體按鍵類型可參考——
http://doc.qt.io/qt-5/qt.html#MouseButton-enum
PRessed:bool類型,當acceptedButtons中有鼠標鍵按下時為true。
pressedButtons:枚舉值,保存了acceptedButtons中按下的鼠標鍵。
containsMouse:bool類型,記錄光標是否在當前的MouseArea,與hoverEabled有關。
hoverEnabled:默認false,只有按下鼠標鍵時才處理鼠標事件,為true時即使沒有按下鼠標鍵也會作相應的處理,影響的是containsMouse屬性和onEntered()/onExited()/onPositionChanged()信號。
containsPress:bool類型,這個是Qt5.4新出現的屬性,效果等同于“pressed && containsMouse”。
cursorShape:Qt::CursorShape枚舉類型,默認是Qt.ArrowCursor,用來設置光標形狀,具體類型可參考——
http://doc.qt.io/qt-5/qt.html#CursorShape-enum
enabled:bool類型,默認為true,用來設置當前對象是否響應鼠標事件,與Item元素的enabled屬性不同的是,它只是對鼠標事件有效,不影響鍵盤事件,也不影響孩子對象。
mouseX/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時,鼠標事件可被父對象接收。
drag.threshold:像素閾值,平臺相關。
最后,再列舉幾個好玩的UI交互元素。
Flickable、Flipable可以實現彈動效果,就是一個小小的動畫。
PinchArea可以通過兩點觸摸來實現旋轉、縮放效果。
MutiPointTouchArea可以實現多點觸摸手勢。
Drag、DropArea也可以實現移動等效果。
新聞熱點
疑難解答