【问题标题】:QML Mousearea onReleased not emittedQML Mousearea onReleased 未发出
【发布时间】:2018-10-26 13:06:04
【问题描述】:

我正在尝试在 QML 的矩形中使用 Mousearea。我正在 onPressed、OnCLicked、onDoubleClicked 和 onPositionChanged。

但是,QML 没有收到 onReleased 事件。你们能告诉我,为什么它不起作用?我的代码如下:

Rectangle {
    width: parent.width
    height: 500
    MouseArea {
        id: mouseArea
        anchors.fill: parent
        hoverEnabled: true
        preventStealing: true
        onPositionChanged: {
            //                    console.log("onPositionChanged mouse X", mouse.x)
            //                    console.log("onPositionChanged mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onClicked:{
            console.log("onClicked mouse X", mouse.x)
            console.log("onClicked mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onDoubleClicked:{
            console.log("onDoubleClicked mouse X", mouse.x)
            console.log("onDoubleClicked mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onExited:{
            console.log("onExited")
        }
        onPressAndHold:{
            console.log("onPressAndHold mouse X", mouse.x)
            console.log("onPressAndHold mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onPressed:{
            console.log("onPressed mouse X", mouse.x)
            console.log("onPressed mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onReleased:{
            console.log("onReleased mouse X", mouse.x)
            console.log("onReleased mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onCanceled:{
            console.log("onCanceled mouse X", mouse.x)
            console.log("onCanceled mouse Y", mouse.y)
            mouse.accepted = false;
        }
    }
}

【问题讨论】:

    标签: qt qml mousearea


    【解决方案1】:

    如果您附加一个清除 mouse.accepted 的 onPressed 处理程序,则 MouseArea 假定如果您对按下不感兴趣,那么您对任何后续相关信号都不感兴趣,因此它不会发出 clicked、pressAndHold 或释放。另一方面,如果您保留 mouse.accepted 设置,则其他较低的 MouseArea 对象将看不到任何消息。不幸的是,这使得无法监控由较低 MouseArea 处理的所有信号。

    【讨论】:

      【解决方案2】:

      根据docs 中的事件行为。

      处理此信号时,更改鼠标参数的接受属性无效。

      因此,如果您在上面的代码中注释 mouse.accepted = false; 行,它将无法正常工作。

      下面的工作代码

      MouseArea {
          id: mouseArea
          anchors.fill: parent
          hoverEnabled: true
          preventStealing: true         
          onReleased:{
              console.log("onReleased mouse X", mouse.x)
              console.log("onReleased mouse Y", mouse.y)
          }
      }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多