Qt 检查在QML中是否同时按下鼠标和空格键
我想检查是否正在使用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同时按下?以下是
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。