Qt快捷键相关的类包括
1.基于QShortcut的方式去做全局快捷键
QKeySequence/ QShortcut /QAction/QShortcutMap
QKeySequence表示对于键盘的ID,最后可以保存四个键盘ID的组合,有一组枚举key_A…。初始化的化的时候既可通过枚举表示键盘ID,也可以通过字符串表,通过字符串表示的时候对字符串解码,生成对应的键盘ID。
QShortcut 表示一个激活快捷键动作的对象,继承与QObject,创建完这个对象,设置完对应的QKeySequence后,当触发快捷键后,能发送active信号通知其他的对象。QShortcut拥有除键盘ID以外的其他ID,包括对应的窗体,以及能激发快捷键的属性(应用全局,窗口,控件,控件及其子控件)。
QShortcutMap 是全局Application的成员变量,每定义一个QShortcut对象,就会在构造函数中调用redoGrab函数,将自己插入到全局QShortcutMap中。QShortcutMap中tryShortcutEvent函数负责接收KeyEvent,做事件的匹配,各种条件的判断。然后包装成QShortEvent发送到QShortcut中去。QShortcut中接收到了QShortEvent事件,然后再做条件判断,发送active信号。
QAction和QShortcut原理上基本一样,也有QKeySequence,初始化,将QKeySequence
保存到全局的QShortMap中,事件转发后,再event里面接收QShortcutEvent,然后激活actived()函数,触发信号。
2.在控制的事件函数中捕获键盘事件。
自己通过控件的KeyPressEvent去监听,然后去判断处理对应的事件逻辑。缺点是控件必须有焦点,能接收到对应的事件。