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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM