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

Qt 检查在QML中是否同时按下鼠标和空格键,qt,input,keyboard,qml,mouse,Qt,Input,Keyboard,Qml,Mouse,我想检查是否正在使用QML同时按下鼠标和空格键 我可以检查鼠标和其他修改键是否被按下。例如: MouseArea { onPressed: { if(mouse.modifiers & QT.ControlModifier) { // do something } } } 但是,我知道如何检查键的唯一方法是在keys.onPressed处理程序中。鼠标earea on pressed和键之间是否有通信的方法。on on pressed同时按下?以下是

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

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

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

但是,我知道如何检查键的唯一方法是在
keys.onPressed
处理程序中。鼠标earea on pressed和
键之间是否有通信的方法。on on pressed
同时按下?

以下是相同问题的示例代码:

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();
        }
    }
}
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")
        }
    }
}
main.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();
        }
    }
}
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
将在鼠标和空格同时单击时触发。

注意,
enum
需要Qt 5.10或更高版本

相同时间意味着什么?时间上总会有一个小小的差距。因此,您可以在按下其中一个键时启动计时器,并在第二个键同时按下时检查时间差,这意味着检测两个键是否同时按下。把我绊倒的部分是把按键放在哪里。由于我(假设)无法将其嵌套在鼠标区域块内。我需要能够在鼠标eareaonpressed和按键之间传递一些信息。onPressed。