最近项目中有个小需求,需要在目标板上实现键盘快捷键双击呼出操作菜单,这里通过qml提供的Shortcut快捷键控件模拟实现
创建qml组件:CustomKeyEvent.qml
import QtQuick 2.0
import QtQuick 2.12
Item {
id: keyItem
property var customKey: qsTr("Tab")
property int isPressed: 0
property int customKeyDoubleClick: 0
anchors.fill: parent
focus: true
Timer{
id: keyTime
interval: 200
onTriggered:{
keyItem.isPressed = 0
}
}
Shortcut{
sequence: customKey
autoRepeat: false //长按不触发
context: Qt.ApplicationShortcut
onActivated: {
console.log(customKey+" activate")
dClick()
}
}
function dClick(){
if(keyTime.running){
if(1 === keyItem.isPressed){
//双击
keyItem.isPressed = 0
keyItem.customKeyDoubleClick = 1
keyTime.stop()
}
}else{
keyItem.isPressed = 1
keyItem.customKeyDoubleClick = 0
keyTime.start()
}
}
}
main.qmi
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
Window {
id: win
visible: true
width: Screen.width
height: Screen.height
title: qsTr("Hello World")
Button{
id: testBtn
anchors.centerIn: parent
background: Rectangle{
color: "orange"
opacity: 0.2
width: 200
height: 40
anchors.centerIn: parent
}
text: qsTr("Test Button")
CustomKeyEvent {
customKey: qsTr("space")
onCustomKeyDoubleClickChanged: {
if(1 == customKeyDoubleClick){
testBtn.text = qsTr("Test Button double click...")
}else{
testBtn.text = qsTr("Test Button")
}
}
}
}
Rectangle{
anchors.fill: parent
color: "#00ffee"
opacity: 0.2
}
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}