MouseArea
MouseArea
继承于Item
且本身不可见,它通常与可见组件结合使用,以便为指定的组件提供鼠标操作的功能。尽管MouseArea
拥有visible
属性,不过该属性与组件是否可见并没有关系。当visible
属性值为false
时,表示忽略该鼠标区域的鼠标事件,类似enabled
属性设置为false
。
下面是一个最简单的示例,点击绿色矩形后该矩形会变成红色。
Rectangle {
width: 100
height: 100
color: "green"
MouseArea {
anchors.fill: parent
onClicked: { parent.color = "red" }
}
}
MouseArea
提供了acceptedButtons
属性用于控制具体哪个或者哪些鼠标按钮可以触发事件,默认为Qt.LeftButton
。如果需要支持多个鼠标按钮,可以用或运算符|
进行组合。如Qt.LeftButton | Qt.RightButton
,甚至使用Qt.AllButtons
接收所有鼠标事件。
❝这里我们使用了
❞Qt
这一全局对象,使用它可以获取到Qt中很多有用的枚举类型和函数,如上面的LeftButton
。该全局对象与Qt核心模块中的Qt命名空间的各种标识符一一对应。
上面的示例中,我们使用了onClicked
这一事件处理程序,QML中约定对于任意信号someSignal
,都有一个onSomeSignal
的事件处理程序与之对应(信号名称前加单词on
,并且信号首字母改成大写)。当信号发射时,事件处理程序会被执行。所以通过上面的代码我们可以推断出MouseArea
提供了一个clicked
的信号。事实上,MouseArea
常用的信号除了clicked
外,还有doubleClicked
,positionChanged
,pressAndHold
,pressed
,released
等。一般情况下,一次clicked
事件相当于一次pressed
与released
的组合事件。不过当处理长按事件时,并不会触发clicked
事件,而是pressAndHold
事件。MouseArea
甚至提供了pressAndHoldInterval
属性,用于控制长按事件的触发时间,默认为800毫秒。
Rectangle {