最近做一个项目需要注册全局热键,在网上搜索发现有个第三方库 libqxt 中给出一个比较好的跨平台的解决方案,就是 QxtGlobalShortcut。

但是编译过程中发现这个库用到的QAbstractEventDispatcher::EventFilter在qt5.3.1中已经没了,所以我就自己改写了一下。

更改部分如下:

  在QxtGlobalShortcutPrivate类的前面添加如下代码,因为在qt5中需要用到QAbstractNativeEventFilter这个类

源文章地址http://www.cnblogs.com/AfterTheRainOfStars/p/3946313.html

  

 #if(QT_VERSION>=0x050000)
#include <QAbstractNativeEventFilter>
#endif

然后将

class QxtGlobalShortcutPrivate : public QxtPrivate<QxtGlobalShortcut>

改为

 class QxtGlobalShortcutPrivate : public QxtPrivate<QxtGlobalShortcut>
#if(QT_VERSION>=0x050000)
, public QAbstractNativeEventFilter
#endif

再将

 static QAbstractEventDispatcher::EventFilter prevEventFilter;
static bool eventFilter(void* message);

修改为

 #if(QT_VERSION<0x050000)
static QAbstractEventDispatcher::EventFilter prevEventFilter;
static bool eventFilter(void* message);
#else
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result);
#endif

然后分别在qxtglobalshortcut_mac.cpp,qxtglobalshortcut_win.cpp,qxtglobalshortcut_x11.cpp中将

bool QxtGlobalShortcutPrivate::eventFilter(void* message)

函数的实现改为如下:

 #if(QT_VERSION<0x050000)
bool QxtGlobalShortcutPrivate::eventFilter(void* message)
{
原本函数体内的代码;
}
#else
bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray &, void *message, long *)
{
同 eventFilter函数内的代码
}
#endif

经过这样修改以后就能用在qt5.3.1上面了,而且不影响在原本的qt4上使用

代码下载地址:http://download.csdn.net/detail/zhangyspa/7842941

另外,关于QxtGlobalShortcut的使用方法可以参考这个博客

http://blog.csdn.net/dbzhang800/article/details/6302816

Qt5全局热键-QxtGlobalShortcut的更多相关文章

  1. Qt5全局热键第三方库qxtglobalshortcut5使用

    1.下载第三方库https://github.com/ddqd/qxtglobalshortcut5. 2.把qxtglobalshortcut5文件放在项目目录下,在项目.pro加入一句,inclu ...

  2. QT全局热键(用nativeKeycode封装API,不跨平台)

    在网上找了很长时间,大家都提到了一个QT全局热键库(qxtglobalshortcut),支持跨平台.在这篇文章中,我将只展示出windows平台下全局热键的设置. 这里提供的方法是在MyGlobal ...

  3. Qt 5.x 全局热键 for windows

    Qt 升级到5.x版本后,QAbstractEventDispatcher中函数发生变动,导致libqxt库中的qxtGlobalShortcut挂掉.参考qxtGlobalShortcut写了一个全 ...

  4. <转>MFC注册系统/全局热键。

    <转>MFC注册系统/全局热键. 1. BEGIN_MESSAGE_MAP(CRS232TESTDlg, CDialog) //{{AFX_MSG_MAP(CRS232TESTDlg) O ...

  5. Qt全局热键(windows篇)

      Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对这些进行支持,我们就只能自己写代码,调用系统相关的API了. 注意,这个 ...

  6. Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)

    转载:http://www.cuteqt.com/blog/?p=2088 Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对 ...

  7. 使用WinAPI全局热键注册和全局模拟按键

    一.全局热键注册 1.先引用DLL [System.Runtime.InteropServices.DllImport("user32.dll")] //导入WinAPI publ ...

  8. Delphi全局热键的注册

    1.在窗启动时创建ATOM;(aatom:ATOM;定义在private中) then begin aatom:=GlobalAddAtom('ZWXhotKey'); end; ) then beg ...

  9. 第三方包jintellitype实现Java设置全局热键

    Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...

随机推荐

  1. flask内置session原理

    内置session原理 请求到来 当请求进来之后,先执行Flask对象的 __call__ 方法 def wsgi_app(self, environ, start_response): # 获取请求 ...

  2. SQLSERVER2016 无域控AlwaysOn 实施步骤

    SQLSERVER2016 无域控AlwaysOn 实施步骤 步骤: 一.安装3个windows server 2016系统 1)在3台机器建立具有administrators权限的相同账号密码,本例 ...

  3. 003-spring boot项目的项目属性配置

    一.application.properties文件. 1.项目的配置文件内容.配置了端口,超时连接时间, 2.控制器. 3.访问. 二.application.yml文件 1.application ...

  4. hash值是啥,单页面应用的实质

    1.什么hash Location hash属性,http://www.runoob.com/jsref/prop-loc-hash.html,hash 属性是一个可读可写的字符串,该字符串是 URL ...

  5. 好的博客参考之Spring

    https://blog.csdn.net/bao19901210/article/details/41724355

  6. react-native android 打包发布

    react-native android  打包步骤 <一>.生成签名文件(应用身份证) 1.使用keytool命令   keytool -genkey -v -keystore my-r ...

  7. Codeforces 235C. Cyclical Quest

    传送门 写的时候挺蛋疼的. 刚开始的时候思路没跑偏,无非就是建个SAM然后把串开两倍然后在SAM上跑完后统计贡献.但是卡在第二个样例上就是没考虑相同的情况. 然后开始乱搞,发现会出现相同串的只有可能是 ...

  8. 20145314郑凯杰《信息安全系统设计基础》第6周学习总结 part A

    第4章 处理器体系结构 part 1 本部分对改章节的知识点进行总结: 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA). 不同的出路器有不同的ISA. ISA模型看上去应该是顺 ...

  9. 20145331《Java程序设计》第1周学习总结

    20145331<Java程序设计>第1周学习总结 教材学习内容总结 第一章 1.java的三大平台分别为java SE.java EE.java ME,其中java SE是基础. 2.j ...

  10. pyspider—爬取下载图片

    以第一ppt网站为例:http://www.1ppt.com/ from pyspider.libs.base_handler import * import urllib2,HTMLParser,r ...