1.简介
QShortcut是一个方便的工具类,用于在应用程序中创建快捷键。通过设置快捷键和关联的处理函数,可以实现快速执行某个操作的功能。
cpp
// 创建一个快捷键,关联到MyWidget类的keyPressEvent()函数
QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+K"), this);
connect(shortcut, &QShortcut::activated, this, &MyWidget::keyPressEvent)
QKeySequence是一个字符串序列,用于表示一系列的键盘按键。通过使用QKeySequence,可以方便地生成快捷键,并将其与特定的处理函数关联起来。
cpp
QKeySequence sequence("Ctrl+K"); // 创建一个表示"Ctrl+K"的键盘序列
QShortcut *shortcut = new QShortcut(sequence, this);
connect(shortcut, &QShortcut::activated, this, &MyWidget::keyPressEvent);
QKeySequence是一个可选组合了Shift、Ctrl和Alt的键序列。可以通过多种方式提供该键序列:
cpp
setKey(0); // no signal emitted
setKey(QKeySequence()); // no signal emitted
setKey(0x3b1); // Greek letter alpha
setKey(Qt::Key_D); // 'd', e.g. to delete
setKey('q'); // 'q', e.g. to quit
setKey(Qt::CTRL + Qt::Key_P); // Ctrl+P, e.g. to print document
setKey("Ctrl+P"); // Ctrl+P, e.g. to print document
QShortcut的工作原理主要基于Qt的事件处理机制,当用户按下键盘上的键时,Qt 会生成一个键盘事件(QKeyEvent),QShortcut监听这些事件,并在检测到与已注册的快捷键匹配的键组合时触发相应的动作。
需要注意的是,QShortcut只对键盘事件有效。如果你需要监听鼠标事件或其他类型的事件,你需要使用其他机制,比如QAction或自定义的事件过滤器。
2.常用方法
构造函数:创建一个 QShortcut 实例,key 是快捷键组合,parent 是父对象。
cpp
QShortcut(const QKeySequence &key, QObject *parent):
设置快捷键:设置快捷键组合。
cpp
setKey(const QKeySequence &key)
设置快捷键的描述,这可以在帮助系统中显示。
cpp
setWhatsThis(const QString &text):
激活快捷键: 启用或禁用快捷键。
cpp
setEnabled(bool enabled)
设置快捷方式有效的上下文 。
cpp
setContext(Qt::ShortcutContext context)
信号:
当快捷键可能不明确(即有多个快捷键具有相同的键组合)时发出这个信号。
cpp
activatedAmbiguously()
当快捷键被激活时发出这个信号。
cpp
activated():
3.示例
cpp
#include "widget.h"
#include <QApplication>
#include <QShortcut>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
//创建一个快捷键,当用户按下 Ctrl+P 时退出程序
QShortcut *shortcut = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_P), &w);
QObject::connect(shortcut, &QShortcut::activated, [&]() {
qApp->exit();
});
return a.exec();
}
4.避免快捷键冲突
可能会出现快捷键冲突的情况,即两个或多个快捷键具有相同的键组合,或者在特定的上下文中,一个快捷键被另一个窗口或应用程序占用。这可能导致快捷键无法按预期工作,或者触发错误的动作。
检查可用性:在注册快捷键之前,可以检查该快捷键是否已经被其他 QShortcut 实例使用,或者是否与操作系统的快捷键冲突。QShortcut 提供了一个 setContext 方法,可以用来限制快捷键的触发上下文(例如,只在应用程序有焦点时触发)。
使用独一无二的组合:尽量使用不常见的键组合作为快捷键,比如使用功能键(F1-F12)或者组合键(Ctrl+Alt+Shift+Key)。
使用 activatedAmbiguously 信号:当快捷键可能不明确时,QShortcut 会发出 activatedAmbiguously 信号。你可以连接这个信号来处理潜在的冲突,例如,显示一个警告对话框或者忽略该快捷键的触发。