Bootstrap

​​​​​​​​​​​​​​★3.3 事件处理

★3.3.1 ※MouseArea

Item <-- MouseArea

属性

acceptedButtons : Qt::MouseButtons

containsMouse : bool

【书】只读属性。表明当前鼠标光标是否在MouseArea上,默认只有鼠标的一个按钮处于按下状态时才可以被检测到。

containsPress : bool

cursorShape : Qt::CursorShape

drag

下面这些解释都来自书P117

drag.active : bool

【书】指定目标项目当前是否可以被拖动。值:true 或 false

?好像是个只读属性不能设置。等于说设置了target就等于说是true了?

drag.axis : enumeration

【书】指定可以拖动的方向。值:Drag.XAxis 水平方向

Drag.YAxis 垂直方向

Drag.XAndYAxis 水平和垂直方向

drag.filterChildren : bool

【书】使子 MouseArea 也启用拖动。值:true 或 false

drag.maximumX : real

【书】最小和最大拖动距离。值是像素,real类型的值。

drag.maximumY : real

drag.minimumX : real

drag.minimumY : real

drag.smoothed : bool

【书】是否平滑拖动。值:true或false

drag.target : Item

【书】指定要拖动的项目ID。值:对象

drag.threshold : real

【书】启用拖动的阈值,超过该值才被认为是一次拖动;合理设置阈值可以有效避免用户因抖动等原因造成的拖动误判。 real类型的值,以像素为单位。

enabled : bool

【书】是否启用鼠标处理,默认为true。如果设置为false则不处理任何鼠标事件。

hoverEnabled : bool

【书】默认情况下MouseArea项目只报告鼠标单击而不报告鼠标光标的位置改变,这可以通过设置hoverEnabled属性为true来进行更改。这样设置后,onPositionChanged(),onEntered()和onExited()等处理函数才可以使用。而且这时containsMouse属性也可以在没有鼠标按钮按下的情况下检查光标。

mouseX : real

onMouseXChanged: {

    if (mouseX - recZoom.x >= 0) {

         xScaleZoom = 1;

         recZoom.width = mouseX - recZoom.x;

     } else {

         xScaleZoom = -1;

         recZoom.width = recZoom.x - mouseX;

     }

}

mouseY : real

onMouseYChanged: {

    if (mouseY - recZoom.y >= 0) {

        yScaleZoom = 1;

        recZoom.height = mouseY - recZoom.y;

     } else {

         yScaleZoom = -1;

         recZoom.height = recZoom.y - mouseY;

     }

}

pressAndHoldInterval : int

pressed : bool

【书】只读属性,表明是否在MouseArea上按住了鼠标按钮,这个属性经常用于属性绑定,可以实现在鼠标按下时执行一些操作。

【补例子】

pressedButtons : MouseButtons

preventStealing : bool

propagateComposedEvents : bool

【书】属性设置为true来传播clicked,doubleClicked和pressAndHold等事件。但是只有在MouseArea没有接受这些事件的时候,它们才可以继续向下传播。

scrollGestureEnabled : bool

信号

canceled()

clicked(MouseEvent mouse)

doubleClicked(MouseEvent mouse)

entered()

exited()

positionChanged(MouseEvent mouse)

onPositionChanged()

pressAndHold(MouseEvent mouse)

pressed(MouseEvent mouse)

onPressed()

released(MouseEvent mouse)

onReleased()

wheel(WheelEvent wheel)

Method

为了与不同的元素交互,你通常需要使用 MouseArea(鼠标区域)元素。这是一个矩形的非可视化元素对象,你可以通过它来捕捉鼠标事件。当用户与可视化端口交互时,mouseArea 通常被用来与可视化元素对象一起执行命令。

很多时候,MouseArea 区域会传递一个鼠标事件作为参数,这个参数中包含了很多鼠标事件信息,例如,单击的位置,具体按下的一个鼠标左键还是右键,以及一些键盘按键信息。

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';
         }
     }
 }

在上面的例子中,当 Rectangle 区域被右键单击时会触发改变颜色。

也是继承自Item.

因为它看不到。所以在MouseArea里外面又套了一个Rectangle.下面的例子是在MouseArea里面嵌套一个Rectangle.

;