如何为鼠标区域QML设置pressed = false

时间:2017-03-14 15:45:43

标签: qt qml qt5

我遇到了下一种情况:

我有一个带有MouseArea的项目。这是我在屏幕上的按钮 - 键盘。

  1. 我长期按下键盘上的按钮。
  2. 我不释放此按钮(按住它)。
  3. 在onPressed {}信号处理程序中,我正在打开另一个屏幕。
  4. 键盘上的我的按钮不再接收释放信号。
  5. 当我回到上一个键盘时 - 我的按钮仍然按下。
  6. 我试图设置“pressed”= false,但这只是readonly属性。

    我试图发出release()信号,但它没有清除“按下”标志。 但我认为我是以错误的方式做到的。函数发布需要参数 - mause - mouseEvent。 mouse参数提供有关单击的信息,包括单击发布的x和y位置以及是否保持单击。我没有找到如何正确设置它。

    我尝试更新MouseArea,但没有帮助。

    我不知道还有什么可以尝试取消“压制”旗帜。

    我的鼠标区域很简单:

    MouseArea {
        id: mouseArea
    
        property bool haveToRelease: false
    
        onHaveToReleaseChanged: {
            if(haveToRelease)
            {
                console.log("BaseButton.qml: call canceled()")
                released()
                haveToRelease = false
            }
        }
    
        anchors.fill: parent
        hoverEnabled: true
    
        onReleased: {
            console.log("BaseButton.qml: onReleased")
        }
    
        onPressedChanged: {
            console.log("BaseButton.qml: onPressedChanged, pressed = ", pressed)
        }
    }
    

    在我的按钮中,我有下一个处理程序:

    onVisibleChanged: {
        if(config.isToyota && !visible && pressed) {
            console.log("Key.qml :: config.isToyota && !visible && pressed")
            releaseButton = true
        }
    }
    

    如果有人帮我解决这个问题,我会很高兴! 非常感谢!

1 个答案:

答案 0 :(得分:1)

至于我按预期工作:

Window {
    visible: true
    width: 640
    height: 480

    Rectangle {
        width: 100
        height: 100
        anchors.centerIn: parent
        color: "orange"
        MouseArea {
            anchors.fill: parent
            onPressed: {
                console.log("pressed");
                wnd.show();
                released(mouse);
            }
            onReleased: {
                console.log("released");
            }
            onPressedChanged: console.log("pressed: " + pressed );
        }
    }

    Window {
        id: wnd
        width: 200
        height: 200
    }
}

输出:

qml: pressed
qml: released
qml: pressed: true
qml: pressed: false