QShortcut
是 Qt 提供的类,用于给窗口部件添加快捷键操作,比如 Ctrl+S
保存,Ctrl+O
打开文件等。
它可以捕捉某个特定键盘组合,并触发你定义的行为(通常是一个槽函数)
QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+O"), this);
connect(shortcut, &QShortcut::activated, this, &YourClass::onOpenFile);
QKeySequence("Ctrl+O")
:定义快捷键this
:指向父控件,通常是窗口类activated
:信号,在快捷键按下时发射onOpenFile
:你定义的槽函数(执行逻辑)QShortcut(const QKeySequence &key, QWidget *parent,
const char *member = nullptr,
const char *ambiguousMember = nullptr,
Qt::ShortcutContext context = Qt::WindowShortcut);
key
:快捷键(如 “Ctrl+S”)parent
:哪个控件监听这个快捷键(必须是 QWidget)member
:早期信号绑定方式,现在已弃用,推荐用 connect()
context
:快捷键作用范围(默认是窗口范围)函数名 | 说明 |
---|---|
setKey(QKeySequence) | 设置快捷键 |
key() | 获取当前快捷键 |
setEnabled(bool) | 启用或禁用快捷键 |
isEnabled() | 是否启用 |
setContext(Qt::ShortcutContext) | 设置作用范围 |
context() | 获取当前作用范围 |
信号名 | 说明 |
---|---|
activated() | 当快捷键被正确触发时发出 |
activatedAmbiguously() | 有多个快捷键冲突时触发 |
enum Qt::ShortcutContext {
Qt::WindowShortcut, // 默认,只在当前窗口有效
Qt::ApplicationShortcut, // 整个应用程序中都有效
Qt::WidgetShortcut, // 仅当前控件有效
Qt::WidgetWithChildrenShortcut // 当前控件及其子控件中有效
};
例如:
shortcut->setContext(Qt::ApplicationShortcut);
#include "widget.h"
#include <QApplication>
#include <QMessageBox>
#include <QShortcut>
#include <QObject>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+Q"), &w);
shortcut->setContext(Qt::WindowShortcut); // 可选
QObject::connect(shortcut, &QShortcut::activated, &w, [=]() {
QMessageBox::information(nullptr, "提示", "你按下了 Ctrl+Q");
});
return a.exec();
}
QWidget
或其子类。QMainWindow::centralWidget()
以外的窗口中时要特别小心作用范围。功能 | QShortcut 做什么 |
---|---|
快捷键触发 | 捕获键盘组合如 Ctrl+S |
自动发信号 | 快捷键触发自动执行某个函数 |
跨平台兼容 | 自动适配 Mac / Windows / Linux |
支持作用域控制 | 控制在哪些控件中生效 |