Qt 将键盘快捷键指定给QML组件
我正在深入使用QML和Qt-Creator构建桌面应用程序,目前我正在研究键盘处理以及它如何与QML元素一起工作。我已经意识到桌面小部件缺少合适的QML替代品 我当前的问题是,我希望将一些全局键盘快捷键分配给某些特定的QML组件(例如将键盘快捷键分配给GUI上的按钮),这些组件应该会激活它们。我能做的最好的事情就是使用聚焦镜和键导航,通过键盘导航GUI,但这不是一回事Qt 将键盘快捷键指定给QML组件,qt,qml,qt-quick,qt4.7,qt5.1,Qt,Qml,Qt Quick,Qt4.7,Qt5.1,我正在深入使用QML和Qt-Creator构建桌面应用程序,目前我正在研究键盘处理以及它如何与QML元素一起工作。我已经意识到桌面小部件缺少合适的QML替代品 我当前的问题是,我希望将一些全局键盘快捷键分配给某些特定的QML组件(例如将键盘快捷键分配给GUI上的按钮),这些组件应该会激活它们。我能做的最好的事情就是使用聚焦镜和键导航,通过键盘导航GUI,但这不是一回事 有人能建议在这种情况下该怎么做吗?Qt5有没有这样的功能?我在互联网上找不到任何关于此的信息。因此,假设您正在调用类似于此的按钮
有人能建议在这种情况下该怎么做吗?Qt5有没有这样的功能?我在互联网上找不到任何关于此的信息。因此,假设您正在调用类似于此的按钮单击事件的函数
Button {
...
MouseArea {
anchor.fill: parent
onClicked: callThisFunction();
}
}
然后可以用这种方式指定全局键盘快捷键。但是限制是全局QML元素(包含所有其他QML元素的父元素)应该具有焦点。例:
Rectangle {
id: parentWindow
...
...
Button {
...
MouseArea {
anchor.fill: parent
onClicked: callThisFunction();
}
}
Keys.onSelectPressed: callThisFunction()
}
这并不完全是您想要的,但可能会有所帮助。回答我自己的问题,因为现在可以在Qt 5.1.1中实现快捷方式。 使用QML
操作
项,快捷键可以轻松绑定到QtQuick
控件,如按钮
、工具按钮
和菜单项
。e、 g:
ApplicationWindow {
...
ToolButton { action: openAction } // Add a tool button in a ToolBar
...
Action {
id: openAction
text: "&Open"
shortcut: "Ctrl+O"
onTriggered: // Do some action
tooltip: "Open an image"
}
}
按Ctrl+O将执行onTriggered部分中指定的操作
请参阅通过使用C++(Qt)中的EventFilter,您完全可以在QML中使用快捷方式 您可以通过以下步骤进行操作:
1. Create a Shortcut class by C++.
2. Register QML Type for Shortcut class
3. Import Shortcut to QML file and handle it.
\ifndef快捷方式\u H
#定义快捷方式
#包括
类快捷方式:公共QObject
{
Q_对象
Q_属性(QVariant key READ key WRITE setKey NOTIFY keyChanged)
公众:
显式快捷方式(QObject*parent=0);
无效设置键(QVariant键);
QVariant key(){return m_keySequence;}
bool事件过滤器(QObject*obj,QEvent*e);
信号:
void keyChanged();
无效激活();
void pressed和hold();
公众时段:
私人:
QKeySequence m_keySequence;
布尔m_键按ReadySend;
};
#endif//SHORTCUT_H
从Qt 5.9开始,期望的行为是偶数:
如果省略上下文,它将仅适用于当前活动的窗口,否则对于整个应用程序,请参阅。尝试此QShortcut QShortcut可用于基于QWidget的类。没有直接的方法使本机QML元素响应全局捷径。例如,可以将密钥分配给QML按钮,但它仅在按钮具有焦点时才起作用。同样的道理也很有趣。我在主GUI屏幕上使用QDeclarativeView(基于QWidget),其中嵌入了QML,因此应用程序范围的快捷方式现在很简单。
import QtQuick 2.9
Item {
Shortcut {
context: Qt.ApplicationShortcut
sequences: [StandardKey.Close, "Ctrl+W"]
onActivated: {
container.clicked()
console.log("JS: Shortcut activated.")
}
}
}