在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 onPressed
和 Keys.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 或更高版本
我想使用 QML 检查鼠标和空格键是否同时按下
我可以检查是否按下了鼠标和其他修饰键。例如:
MouseArea {
onPressed: {
if(mouse.modifiers & QT.ControlModifier) {
// do something
}
}
}
但是,我知道如何检查密钥的唯一方法是在 Keys.onPressed
处理程序内部。 MouseArea onPressed
和 Keys.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 或更高版本