Qt QShortCut快捷键原理、实现和应用
创始人
2025-05-31 17:07:24
0

应用

QShortCut方式的快捷键有好几种使用方式:
1.通过绑定QAction或QMenu的方式。QAction和QMenu都提供了setShortcut()接口;
2.实例化一个对象:然后绑定信号槽activated()信号:

auto shortcut = new QShortcut(QKeySequence(tr("Ctrl+O", "File|Open")), parent); 
connect(shortcut,&QShortcut::activated ,this,[=](){});

原理

QShortCut通过一个全局shortcutmap进行管理,当触发键盘事件时,会先检查shortcutmap是否有对应快捷键,然后触发快捷键绑定的事件;再对键盘事件进行处理;

匹配函数:qWidgetShortcutContextMatcher();
匹配函数过程:
1.首先是获取当前活动的顶部窗口qApp->activeWindow(),与shorCut parent窗口所在的toplevelWindow所在窗口进行匹配,排除是否在当前窗口触发;
2.接着根据所设置的Qt::ShortcutContext来判断是以什么样的方式进行判断,默认是Qt::WindowShortcut

底层实现,相关代码

qWidgetShortcutContextMatcher():是实际匹配快捷键的算法函数,通过函数回调方式解耦;
在这里插入图片描述
在这里插入图片描述

处理消息相关代码

在这里插入图片描述

核心函数调用链:

tryShortcut() => nextState() => find() => dispatchEvent()
尝试调用快捷键 => 状态机查询匹配 => 查找快捷键 =>分发事件(通过CoreApplication::sendEvent)

注意事项

使用QShortCut方式需要注意的是如果采用动态嵌入窗口(dock)的方式组成你的界面,两个界面尽量不要注册相同的快捷键,不然会出现独立窗口时可用,嵌入子窗口会出现快捷键冲突报错;原因在于嵌入后QShortCut 通过全局shortcupMap判断的activeWindow是同一个顶部窗口;
这时候倒不如直接通过keyEvent触发组合键盘事件即可

相关内容

热门资讯

“男子持刀入室盗窃”视频引发关... 近日,一段疑似“小偷”入室盗窃被业主家中监控拍下的视频在网上引发关注。11月21日晚,“翠屏公安”微...
绝不允许日本军国主义幽灵复活!... 2025年11月7日,日本首相高市早苗宣称,如果中国大陆对台湾出动军舰并使用武力,可能会构成“存亡危...
【解决】AI法律助手荣获202... 2025全球数字经济大会启幕,搭建国际数字合作高端平台 经国务院批准,由北京市人民政府、国家互联网信...
嘉兴男子与妻争吵,突然将行李箱... 近日,浙江嘉兴一对夫妻因琐事发生争吵,丈夫突然将装满衣物的行李箱从6楼扔到楼下,引发关注。11月22...
三地107家律所齐聚丰台,京津... 11月22日,京津冀律师驿站举办“党建业务深度融合 促进行业规范发展”主题活动,发布“百千万行动计划...
家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...