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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)