Qt QML按钮-如何检查按钮是否用控制修改器按下?
我们如何在同时按下“控制”键的情况下检测QML按钮被点击(选中)?a好的,当您处于按钮的Qt QML按钮-如何检查按钮是否用控制修改器按下?,qt,qml,qt5,Qt,Qml,Qt5,我们如何在同时按下“控制”键的情况下检测QML按钮被点击(选中)?a好的,当您处于按钮的on按下处理程序中时,无法检查是否按下了CTRL键,但您可以解决以下问题: 按下/释放CTRL键时,让QML通知您。将该状态保存在属性中,并在按钮的onPressed处理程序中使用 // Example code Item { id: rootItem anchors.fill: parent focus: true property bool ctrlPressed: fa
on按下
处理程序中时,无法检查是否按下了CTRL
键,但您可以解决以下问题:
按下/释放CTRL
键时,让QML通知您。将该状态保存在属性中,并在按钮的onPressed
处理程序中使用
// Example code
Item {
id: rootItem
anchors.fill: parent
focus: true
property bool ctrlPressed: false
Keys.onPressed: {
if (event.key === Qt.Key_Control) {
ctrlPressed = true
}
}
Keys.onReleased: {
if (event.key === Qt.Key_Control) {
ctrlPressed = false
}
}
Button {
anchors.centerIn: parent
text: "Press me"
onPressed: {
if (rootItem.ctrlPressed)
console.log("Click with CTRL")
else
console.log("Click without CTRL")
}
}
}
这只是一个“变通办法”,存在一些问题:
必须具有焦点rootItem
- 当按下
按钮时,应用程序失去焦点(CTRL
+ALT
或最小化)时,可能会出现意外行为TAB
MouseArea
。您可以使用propogateComposedEvents
来允许按钮的默认鼠标处理仍然发生,或者您也可以自己手动重新生成单击的
信号。这两种选择都不理想,但也许其中一种适合你
Button {
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
onClicked: {
if ((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ControlModifier)) {
doSomething();
}
}
}
}
你不能检查它。我建议你将event.key===Qt.key\u Control
更改为event.modifiers&Qt.ControlModifier
检查,这样按下什么都不重要。只有修饰语才重要。