在QML中检查鼠标和空格键是否同时按下

Check if the mouse and spacebar are pressed at the same time in QML

我想使用 QML 检查鼠标和空格键是否同时按下

我可以检查是否按下了鼠标和其他修饰键。例如:

MouseArea {
  onPressed: {
    if(mouse.modifiers & QT.ControlModifier) {
      // do something
    }
  }
}

但是,我知道如何检查密钥的唯一方法是在 Keys.onPressed 处理程序内部。 MouseArea onPressedKeys.onPressed 之间有没有办法统一通信?

这是同一问题的示例代码:

MyItem.qml

import QtQuick 2.12

Rectangle {
    id: element
    width: 100
    height: 100
    color: "orange"
    signal mySignal()
    property int myState: MyItem.Bits.None
    enum Bits {
        None = 0,
        MouseOn = 1,
        KeyOn = 2,
        AllOn = 3
    }

    function checkBits()
    {
        if(element.myState === MyItem.Bits.AllOn)
        {
            element.mySignal();
            element.myState = MyItem.Bits.None;
        }
    }

    MouseArea {
        anchors.fill: parent
        onPressed: {
            element.myState |= MyItem.Bits.MouseOn;
            element.checkBits();
        }
        onReleased: {
            element.myState &= ~MyItem.Bits.MouseOn;
            element.checkBits();
        }
    }
    Keys.onSpacePressed: {
        element.myState |= MyItem.Bits.KeyOn;
        element.checkBits();
    }
    Keys.onReleased: {
        if(element.myState & MyItem.Bits.KeyOn)
        {
            element.myState &= ~MyItem.Bits.KeyOn;
            element.checkBits();
        }
    }
}

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 600
    height: 400

    MyItem {
        anchors.centerIn: parent
        focus: true
        onMySignal: {
            console.log("My Signal")
        }
    }
}

MySignal 将同时触发鼠标和 Space 单击。
注意,enum 需要 Qt 5.10 或更高版本