Qt5全局热键-QxtGlobalShortcut

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

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

更改部分如下:

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

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

  

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

 

   然后将

class QxtGlobalShortcutPrivate : public QxtPrivate<QxtGlobalShortcut>

改为

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

再将

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

修改为

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

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

 

bool QxtGlobalShortcutPrivate::eventFilter(void* message)

 

函数的实现改为如下:

 1 #if(QT_VERSION<0x050000)
 2 bool QxtGlobalShortcutPrivate::eventFilter(void* message)
 3 {
 4     原本函数体内的代码;
 5 }
 6 #else
 7 bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray &, void *message, long *)
 8 {
 9   同  eventFilter函数内的代码
10 }
11 #endif

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

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


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

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

 

转载于:https://www.cnblogs.com/AfterTheRainOfStars/p/3946313.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值