欢迎来到 破晓的历程的 博客

⛺️不负时光,不负己✈️

✅ 一、QShortcut 是什么?

QShortcut 是 Qt 提供的类,用于给窗口部件添加快捷键操作,比如 Ctrl+S 保存,Ctrl+O 打开文件等。

它可以捕捉某个特定键盘组合,并触发你定义的行为(通常是一个槽函数)

🍃二、基本语法和用法

img
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() 有多个快捷键冲突时触发

🎮 六、ShortcutContext 快捷键上下文解释

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();
}


⚠️ 注意事项

  1. 父对象必须是 QWidget 或其子类。
  2. 快捷键不要和系统默认冲突(如 Ctrl+C、Ctrl+Alt+Del)。
  3. 不能绑定到 QMainWindow::centralWidget() 以外的窗口中时要特别小心作用范围。
  4. Qt Designer 中也可以通过“动作”系统给按钮或菜单加快捷键。

📚 小结

功能 QShortcut 做什么
快捷键触发 捕获键盘组合如 Ctrl+S
自动发信号 快捷键触发自动执行某个函数
跨平台兼容 自动适配 Mac / Windows / Linux
支持作用域控制 控制在哪些控件中生效
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐