鼠标事件

处理来自所有指针设备的事件(包括鼠标和触摸屏)的一种更现代的方式是通过输入处理器。此页介绍了最初为处理鼠标输入而设计的原始 Qt Quick MouseArea 类型,后来开始处理简单触摸导向用户界面中的单点触摸事件(以合成鼠标事件的形式)。

鼠标类型

鼠标事件处理

QML 使用 信号和处理程序 传递鼠标交互。具体来说,Qt Quick 提供了 MouseAreaMouseEvent 类型,允许开发人员定义 JavaScript 回调(也称为信号处理程序),该回调接受定义区域内的鼠标事件。

定义鼠标区域

MouseArea 类型接收定义区域内的事件。定义此区域的一种快速方法是使用 anchors.fill 属性将 MouseArea 锚定到其父级区域。如果父级是 Rectangle(或任何 Item 组件),则 MouseArea 将填满由父级维度定义的区域。或者,可以定义大于或小于父级的区域。

Rectangle {
    id: button
    width: 100; height: 100

    MouseArea {
        anchors.fill: parent
        onClicked: console.log("button clicked")
    }
    MouseArea {
        width:150; height: 75
        onClicked: console.log("irregular area clicked")
    }
}

接收事件

MouseArea 类型在响应不同的鼠标事件时发出 信号MouseArea 类型文档更详细地描述了这些手势。

  • canceled
  • clicked
  • doubleClicked
  • entered
  • exited
  • positionChanged
  • pressAndHold
  • pressed
  • released

这些信号可以具有在它们发出时调用的回调。

    MouseArea {
        anchors.fill: parent
        onClicked: console.log("area clicked")
        onDoubleClicked: console.log("area double clicked")
        onEntered: console.log("mouse entered the area")
        onExited: console.log("mouse left the area")
    }

启用手势

某些鼠标手势和按钮点击在发送或接收事件之前需要启用。某些 MouseAreaMouseEvent 属性启用了这些手势。

要将某个鼠标按钮设置为要侦听(或明确忽略)的按钮,请将适当的鼠标按钮设置为 acceptedButtons 属性。

自然地,鼠标事件,如按钮点击和鼠标位置,在鼠标点击期间发送。例如,containsMouse属性只有在鼠标按下时才会检索到正确的值。hoverEnabled属性将为鼠标事件和定位启用,即使没有鼠标按钮按下。将hoverEnabled属性设置为true,反过来 ще ще 使enteredexitedpositionChanged信号及其相应的信号处理程序启用。

    MouseArea {
        hoverEnabled: true
        acceptedButtons: Qt.LeftButton | Qt.RightButton
        onEntered: console.log("mouse entered the area")
        onExited: console.log("mouse left the area")
    }

另外,要禁用整个鼠标区域,将MouseAreaenabled属性设置为false

MouseEvent对象

信号及其回调函数接收一个MouseEvent对象作为参数。包含有关鼠标事件信息的mouse对象。例如,可以通过mouse.button属性查询启动事件的鼠标按钮。

MouseEvent对象还可以使用其accepted属性忽略鼠标事件。

接受更多信号

许多信号被发送多次,以反映各种鼠标事件,如双击。为了便于分类鼠标点击,MouseEvent对象有一个accepted属性来禁用事件传播。

有关QML事件系统的更多信息,请阅读信号和处理器以及事件系统文档。

© 2024 Qt公司。本文件中包含的文档贡献是各自所有权者的版权。提供的文档受GNU自由文档许可版本1.3的条款约束,由自由软件基金会发布。Qt及其相关标志是芬兰及全球其他地区Qt公司的商标。所有其他商标都是其各自所有权者的财产。