Linux qt 全局热键,Qt全局热键(windows篇)

本站全部文章由本站和原做者保留一切权力,仅在保留本版权信息、原文连接、原文做者的状况下容许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合做。

Qt对于系统底层,一直没有很好的支持,例如串口并口通讯,还有咱们常常都会用到的全局热键,等等。既然Qt可能出于某种缘由,不对这些进行支持,咱们就只能本身写代码,调用系统相关的API了。

注意,这个是Windows篇,就说明这些代码只支持windows系统。同时,也说明确定还有其余平台的要写。不过要等O(∩_∩)O~

在Qt要调用Windows的API其实很简单,只要在须要用到的头文件中添加#include 便可。不过要注意,Qt仅支持win32的API,像MFC之类的是不支持的。

想要在Qt里使用全局热键,最好的办法是重载QApplication里的winEventFilter函数。这个函数是用来响应Windows系统信息的。其函数原型为virtual bool winEventFilter(MSG *msg, long *result)。当msg指针中的message(MSG结构中的一个元素)为WM_HOTKEY类型时,就是用户激发了热键。整个过程和在VC的消息响应机制很相似,只不过换成了Qt而已。

而若是咱们想要添加本身的全局热键,只须要使用RegisterHotKey函数便可。其函数原型为:

BOOL RegisterHotKey( HWND hWnd,     int id,     UINT fsModifiers,     UINT vk );

HWND类型是Windows中的窗口句柄类型,在Qt中,QWidget及其子类都可使用winId()函数获得。

第二个参数,是一个原子操做类型,用ATOM GlobalAddAtom(LPCTSTR lpString )函数获得。这也是一个Win32API,根据一个string参数能够获得一个惟一的值。使用完以后,必须使用GlobalDeleteAtom函数删除掉整个ATOM。其函数原型为ATOM GlobalDeleteAtom( ATOM nAtom )。

后面两个参数,一个是修饰键,一个是普通按键。例如,假设咱们想注册Ctrl+F4这个热键组合,则fsModifiers就是MOD_CONTROL,而vk就是VK_F4。

若是注册成功,就返回true,不然,返回false。

注意,使用完以后,要使用UnregisterHotKey函数注销,不然你可能再也没法注册这个热键了!除非重启。其函数原型为:BOOL UnregisterHotKey(HWND hWnd,     int id )。

ok,热键注册就完成了。当按下热键后,咱们就会在QApplication里的winEventFilter函数中收到一个msg。这个msg,前面也说过,咱们须要知道它的一个元素message是否是WM_HOTKEY。若是是,就证实咱们收到了Windows系统的热键信息。在MSG结构中,咱们可能还须要理解的元素有两个,分别是wParam和lParam。wParam是注册热键时所用的id,也就是ATOM(原子)。而lParam就是咱们的热键了。其其实是一个32位的类型,前面16位表明普通按键,后16位表明的是修饰键。

至此,Qt在Windows下使用全局热键就完成了。若是有兴趣的朋友,还能够本身尝试一下,修改或直接本身写一份代码。

若有错误,敬请指正。

我把我写的测试代码放到CuteQt论坛,有兴趣的朋友能够去下载。

http://cuteqt.org/bbs/viewthread.php?tid=1641&extra=page%3D1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值