Qt QShortcut快捷键类详解

1.简介

QShortcut是一个方便的工具类,用于在应用程序中创建快捷键。通过设置快捷键和关联的处理函数,可以实现快速执行某个操作的功能。

// 创建一个快捷键,关联到MyWidget类的keyPressEvent()函数
QShortcut *shortcut = new QShortcut(QKeySequence("Ctrl+K"), this);
connect(shortcut, &QShortcut::activated, this, &MyWidget::keyPressEvent)

QKeySequence是一个字符串序列,用于表示一系列的键盘按键。通过使用QKeySequence,可以方便地生成快捷键,并将其与特定的处理函数关联起来。

QKeySequence sequence("Ctrl+K"); // 创建一个表示"Ctrl+K"的键盘序列
QShortcut *shortcut = new QShortcut(sequence, this);
connect(shortcut, &QShortcut::activated, this, &MyWidget::keyPressEvent);

QKeySequence是一个可选组合了Shift、Ctrl和Alt的键序列。可以通过多种方式提供该键序列: 

  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 是父对象。

QShortcut(const QKeySequence &key, QObject *parent):

设置快捷键:设置快捷键组合。

 setKey(const QKeySequence &key)

设置快捷键的描述,这可以在帮助系统中显示。

setWhatsThis(const QString &text):

激活快捷键: 启用或禁用快捷键。

setEnabled(bool enabled)

设置快捷方式有效的上下文 。

setContext(Qt::ShortcutContext context)

信号:
当快捷键可能不明确(即有多个快捷键具有相同的键组合)时发出这个信号。

activatedAmbiguously()

当快捷键被激活时发出这个信号。 

activated():

3.示例

#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 信号。你可以连接这个信号来处理潜在的冲突,例如,显示一个警告对话框或者忽略该快捷键的触发。

5.更多参考

libVLC 专栏介绍-CSDN博客

Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍_qt opengl视频播放器-CSDN博客

QCharts -1.概述-CSDN博客

相关推荐

  1. Qt QShortcut快捷键详解

    2024-05-10 19:54:06       10 阅读
  2. IDEA中查找实现快捷键

    2024-05-10 19:54:06       41 阅读
  3. Object详解

    2024-05-10 19:54:06       30 阅读
  4. Selenium 异常详解

    2024-05-10 19:54:06       9 阅读
  5. Python详解

    2024-05-10 19:54:06       9 阅读
  6. python ---- class详解

    2024-05-10 19:54:06       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 19:54:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 19:54:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 19:54:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 19:54:06       18 阅读

热门阅读

  1. 十二届蓝桥杯Python组3月中/高级试题 第二题

    2024-05-10 19:54:06       9 阅读
  2. 智密腾讯云直播组建--准备腾讯云环境

    2024-05-10 19:54:06       9 阅读
  3. html中的整体布局该如何做

    2024-05-10 19:54:06       8 阅读
  4. nginx常用内置变量

    2024-05-10 19:54:06       10 阅读
  5. 在编程中,什么是类的继承?

    2024-05-10 19:54:06       9 阅读
  6. 获取最新的CVE信息

    2024-05-10 19:54:06       9 阅读
  7. 【Redis7】10大数据类型之Bitmap类型

    2024-05-10 19:54:06       8 阅读
  8. 【数据流图】用JointJs实现数据流图(二)

    2024-05-10 19:54:06       10 阅读
  9. 代码随想录 | 总结篇

    2024-05-10 19:54:06       8 阅读
  10. 头文件相互包含 前向声明

    2024-05-10 19:54:06       7 阅读
  11. 网络相关指令linux指令该怎么使用 - netstat

    2024-05-10 19:54:06       11 阅读