Qt: 使用QKeySequenceEdit和QKeySequence时需要注意的几点
QKeySequenceEdit是一个快捷键控件,接受用户输入的快捷键组合。使用时,有几个需要注意的地方。
- QKeySequenceEdit控件默认支持4个快捷键,也就是连续输入最多四个快捷键,组成一个快捷键序列。比如,“Ctrl+D,Ctrl+D,Ctrl+D,Ctrl+D”,就是按Ctrl+四次D,即触发快捷键操作。以往,如果需要实现单个快捷键的输入和定义,则必须重载QKeySequenceEdit来实现;自Qt6.5开始,增加了一个setMaximumSequenceLength函数,参数设为1时 就相当于只能输入单一快捷键了。
- QKeySequenceEdit的输出结果QKeySequence。在Qt中设置快捷键,一般是通过setShortcut的方式,也就是QAction的setShortcut,默认使用的是Qt::WindowShortcut模式。QPushButton也有个setShortcut,默认使用的也是Qt::WindowShortcut模式。
这里,设置快捷键的时候,支持四种模式:WidgetShortcut,WindowShortcut,ApplicationShortcut和WidgetWithChildrenShortcut。WidgetShortcut方式,当控件的父窗口是焦点窗口时,即可响应;WindowShortcut方式,当控件所在的顶层窗口获得焦点时,可以响应;ApplicationShortcut方式,当应用处于焦点状态,也就是多个顶层窗口中的任意一个是焦点窗口时,即可响应;WidgetWithChildrenShortcut方式,当控件的父窗口或其任意一个主窗口获得焦点时,即可响应。
如果使用WidgetShortcut,则如果存在子控件tableView时,tableView激活的情况下,将无法响应快捷键。此时,可以使用WidgetWithChildrenShortcut方式。
如果使用WindowShortcut,虽然能解决上面的问题,但很容易产生快捷键冲突。
因此,虽然Qt官方将WidgetWithChildrenShortcut设置为最后一个,其意思应该是最不推荐的方式,但从实际需求看,个人更倾向于使用WidgetWithChildrenShortcut。不难猜测,WidgetWithChildrenShortcut很可能更耗费系统资源。
ApplicationShortcut的话,感觉使用场景有限。显然,在Windows平台下,更有效的方式应该是系统全局快捷键WM_HOTKEY。
转载请注明来源,谢谢。
有偿解决C++编程问题,承接项目定制开发;寻一份全职或兼职Windows C++开发工作。联系邮箱:[email protected]。