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 emittedsetKey(QKeySequence()); // no signal emittedsetKey(0x3b1); // Greek letter alphasetKey(Qt::Key_D); // 'd', e.g. to deletesetKey('q'); // 'q', e.g. to quitsetKey(Qt::CTRL + Qt::Key_P); // Ctrl+P, e.g. to print documentsetKey("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博客
相关文章:
Qt QShortcut快捷键类详解
1.简介 QShortcut是一个方便的工具类,用于在应用程序中创建快捷键。通过设置快捷键和关联的处理函数,可以实现快速执行某个操作的功能。 // 创建一个快捷键,关联到MyWidget类的keyPressEvent()函数 QShortcut *shortcut new QShortcut(QKe…...

003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁
文章目录 Redis分布式锁原理1.使用set的命令时,同时设置过期时间2.使用lua脚本,将加锁的命令放在lua脚本中原子性的执行 Jedis分布式锁实现pom.xmlRedisCommandLock.javaRedisCommandLockTest.java 锁过期问题1乐观锁方式,增加版本号(增加版本…...

Jackson工具,java对象和json字符串之间的互相转换
一、maven依赖引入jackson <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.5</version></dependency>jackson-databind依赖见下: <depend…...
【设计模式】之装饰器模式
系列文章目录 【设计模式】之模板方法模式 【设计模式】之责任链模式 【设计模式】之策略模式 【设计模式】之工厂模式(三种) 前言 今天给大家介绍23种设计模式中的装饰器模式。🌈 一、什么是装饰器模式 装饰器模式(Decora…...
leetcode_46.全排列
46. 全排列 题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#…...

【牛客】[HNOI2003]激光炸弹
原题链接:登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 注意从(1,1)开始存即可,所以每次输入x,y之后,要x,y。 因为m的范围最大为…...

Docker与Harbor:构建企业级私有Docker镜像仓库
目录 引言 一、本地私有仓库 (一)基本概述 (二)搭建本地私有仓库 1.下载registry镜像 2.启动容器 3.上传本地镜像 4.客户端下载镜像 二、Harbor简介 (一)什么是 Harbor (二ÿ…...
推荐几个傻瓜式短视频去水印在线网站
在数字化时代,短视频已成为信息传播的重要方式之一。随着TikTok、Instagram Reels、抖音等平台的流行,短视频的制作和分享成为了日常生活的一部分。然而,在分享或编辑这些短视频时,去除水印成为了一项不可或缺的需求。水印是视频原…...

大模型LLM之SFT微调总结
一. SFT微调是什么 在大模型的加持下现有的语义理解系统的效果有一个质的飞跃;相对于之前的有监督的Pre-Train模型;大模型在某些特定的任务中碾压式的超过传统nlp效果;由于常见的大模型参数量巨大;在实际工作中很难直接对大模型训…...

【RocketMQ问题总结-2】
RocketMQ 消息持久化 Broker通过底层的Netty服务器获取到一条消息后,会把这条消息的内容写入到一个CommitLog文件里去(一个Broker进程就只有一个CommitLog文件,也就是说这个Broker上所有Topic的消息都会写入这个文件)。 同时&…...

掌握Android Fragment开发之魂:Fragment的深度解析(上)
Fragment是Android开发中用于构建动态和灵活界面的基石。它不仅提升了应用的模块化程度,还增强了用户界面的动态性和交互性,允许开发者将应用界面划分为多个独立、可重用的部分,每个部分都可以独立于其他部分进行操作。本文将从以下几个方面深…...
深度解读DreamFusion:一站式AI解决方案
DreamFusion是一款备受瞩目的人工智能解决方案,它整合了多种AI技术,为用户提供了一站式的解决方案。本文将全面解读DreamFusion,探讨其特点、功能和应用场景,助您深入了解这一创新工具。 1. 特点概述 DreamFusion具备以下显著特…...
JVM-02
字节码文件是一种特殊的文件格式,它包含了将源代码转换为机器可执行代码所需的指令集。字节码文件通常是由编译器将源代码编译为字节码的中间表示形式。 在Java中,字节码文件的扩展名为.class,它存储了编译后的Java代码。这些字节码文件可以在…...

【一起深度学习——NIN】
NIN神经网络 原理图:代码实现:输出结果: 原理图: 代码实现: import torch from torch import nn from d2l import torch as d2ldef nin_block(in_channels, out_channels, kernel_size, strides, padding):return nn.…...

数字工厂管理系统如何助力企业数据采集与分析
随着科技的不断进步,数字化已成为企业发展的重要趋势。在制造业领域,数字工厂管理系统的应用日益广泛,它不仅提升了生产效率,更在数据采集与分析方面发挥着举足轻重的作用。本文旨在探讨数字工厂管理系统如何助力企业数据采集与分…...
uniap之微信公众号支付
近来用uniapp开发H5的时候,需要接入支付,原来都是基于后端框架来做的,所以可谓是一路坑中过,今天整理下大致流程分享给大家。 先封装util.js,便于后面调用 const isWechat function(){return String(navigator.userA…...
Django知识点总结
因为最近在搞一个Python项目,使用的Django框架。所以快速学习了一下这个web框架。并做一些总结。 Django官网的介绍:Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experience…...

算法(C++
题目:螺旋矩阵(59. 螺旋矩阵 II - 力扣(LeetCode)) 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入&am…...

Python专题:六、循环语句(1)
补充知识 代码的注释 #描述性文字 阅读代码的人更好的理解代码 while循环语句 x<100条件控制语句,Totalx,Total自增加x,x1,x自增加1,x<100此条件满足时,执行while循环,当x101时,x101条…...

力扣2105---给植物浇水II(Java、模拟、双指针)
题目描述: Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 到 n - 1 。其中,第 i 株植物的位置是 x i 。 每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐,最初是…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...