Qt全域熱鍵(windows篇)(轉自:http://www.cuteqt.com/blog/?p=2088)

來源:互聯網
上載者:User
本站所有文章由本站和原作者保留一切權力,僅在保留本著作權資訊、原文連結、原文作者的情況下允許轉載,轉載請勿刪改原文內容, 並不得用於商業用途。 謝謝合作。

原文連結:Qt全域熱鍵(windows篇)

Qt對於系統底層,一直沒有很好的支援,例如串口並口通訊,還有我們經常都會用到的全域熱鍵,等等。既然Qt可能出於某種原因,不對這些進行支援,我們就只能自己寫代碼,調用系統相關的API了。

注意,這個是Windows篇,就說明這些代碼只支援windows系統。同時,也說明肯定還有其他平台的要寫。不過要等O(∩_∩)O~

在Qt要調用Windows的API其實很簡單,只要在需要用到的標頭檔中添加#include <windows.h>即可。不過要注意,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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.