自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在Windows操作系統(tǒng)下的Qt全局熱鍵

移動(dòng)開發(fā)
Qt對于系統(tǒng)底層,一直沒有很好的支持,例如串口并口通信,還有我們經(jīng)常都會(huì)用到的全局熱鍵,等等。

Qt對于系統(tǒng)底層,一直沒有很好的支持,例如串口并口通信,還有我們經(jīng)常都會(huì)用到的全局熱鍵,等等。既然Qt可能出于某種原因,不對這些進(jìn)行支持,我們就只能自己寫代碼,調(diào)用系統(tǒng)相關(guān)的API了。

注意,這個(gè)是Windows篇,就說明這些代碼只支持windows系統(tǒng)。同時(shí),也說明肯定還有其他平臺(tái)的要寫。

在Qt要調(diào)用Windows的API其實(shí)很簡單,只要在需要用到的頭文件中添加#include <windows.h>即可。不過要注意,Qt僅支持win32的API,像MFC之類的是不支持的。

想要在Qt里使用全局熱鍵,最好的辦法是重載QApplication里的winEventFilter函數(shù)。這個(gè)函數(shù)是用來響應(yīng)Windows系統(tǒng)信息的。其函數(shù)原型為virtual bool winEventFilter(MSG *msg, long *result)。當(dāng)msg指針中的message(MSG結(jié)構(gòu)中的一個(gè)元素)為WM_HOTKEY類型時(shí),就是用戶激發(fā)了熱鍵。整個(gè)過程和在VC的消息響應(yīng)機(jī)制很類似,只不過換成了Qt而已。

而如果我們想要添加自己的全局熱鍵,只需要使用RegisterHotKey函數(shù)即可。其函數(shù)原型為:

  1. BOOL RegisterHotKey( HWND hWnd,     int id,     UINT fsModifiers,     UINT vk ); 

HWND類型是Windows中的窗口句柄類型,在Qt中,QWidget及其子類均可使用winId()函數(shù)得到。

第二個(gè)參數(shù),是一個(gè)原子操作類型,用ATOM GlobalAddAtom(LPCTSTR lpString )函數(shù)得到。這也是一個(gè)Win32API,根據(jù)一個(gè)string參數(shù)可以得到一個(gè)唯一的值。使用完之后,必須使用GlobalDeleteAtom函數(shù)刪除掉整個(gè)ATOM。其函數(shù)原型為

  1. ATOM GlobalDeleteAtom( ATOM nAtom ) 

后面兩個(gè)參數(shù),一個(gè)是修飾鍵,一個(gè)是普通按鍵。例如,假設(shè)我們想注冊Ctrl+F4這個(gè)熱鍵組合,則fsModifiers就是MOD_CONTROL,而vk就是VK_F4。

如果注冊成功,就返回true,否則,返回false。

注意,使用完之后,要使用UnregisterHotKey函數(shù)注銷,否則你可能再也無法注冊這個(gè)熱鍵了!除非重啟。其函數(shù)原型為:

  1. BOOL UnregisterHotKey(HWND hWnd,     int id ) 

ok,熱鍵注冊就完成了。當(dāng)按下熱鍵后,我們就會(huì)在QApplication里的winEventFilter函數(shù)中收到一個(gè)msg。這個(gè)msg,前面也說過,我們需要知道它的一個(gè)元素message是不是WM_HOTKEY。如果是,就證明我們收到了Windows系統(tǒng)的熱鍵信息。在MSG結(jié)構(gòu)中,我們可能還需要理解的元素有兩個(gè),分別是wParam和lParam。wParam是注冊熱鍵時(shí)所用的id,也就是ATOM(原子)。而lParam就是我們的熱鍵了。其實(shí)際上是一個(gè)32位的類型,前面16位代表普通按鍵,后16位代表的是修飾鍵。

至此,Qt在Windows下使用全局熱鍵就完成了。如果有興趣的朋友,還可以自己嘗試一下,修改或直接自己寫一份代碼。

【編輯推薦】

  1. QML教程:Qtmediahub項(xiàng)目概述
  2. QML教程:Qt-Quick六大開源組件
  3. QML教程:構(gòu)建和安裝QtComponents
  4. Qt in Scala(JVM)開發(fā)梗概
  5. 用Scala實(shí)現(xiàn)Qt QWidget對象的Eventable接口
責(zé)任編輯:佚名 來源: cuteqt
相關(guān)推薦

2010-05-12 15:34:26

MySQL編碼設(shè)置

2009-02-20 19:56:26

WindowsLinux雙系統(tǒng)

2011-06-20 11:14:09

Qt QxtGlobalS 熱鍵

2010-04-19 15:11:25

Unix操作系統(tǒng)

2009-12-08 18:02:50

2009-12-15 10:47:29

linux操作系統(tǒng)

2009-04-01 14:42:11

操作系統(tǒng)同步MySQL

2011-01-05 10:32:31

linuxqq

2009-07-07 09:18:13

UNIX操作系統(tǒng)

2009-06-19 20:35:07

Linux操作系統(tǒng)

2009-06-25 08:55:53

Linux

2014-08-21 09:48:33

操作系統(tǒng)

2010-08-11 11:13:27

DB2 pe

2010-04-14 16:45:15

Unix操作系統(tǒng)

2009-12-04 17:54:07

Windows 7操作

2014-04-22 10:25:31

Windows 10云操作系統(tǒng)

2009-04-22 08:58:24

Windows 7微軟操作系統(tǒng)

2019-09-29 09:18:11

中科創(chuàng)達(dá)操作系統(tǒng)工程AIoT

2012-03-09 09:45:29

Windows嵌入式操作系統(tǒng)

2009-08-19 09:43:41

Windows 7輸入公式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)