QT 利用QT做乙個鍵盤檢測的例子

2021-10-03 04:33:03 字數 2207 閱讀 1491

當使用者按下某個鍵時,

1.鍵盤會檢測到這個動作,並通過鍵盤控制器把掃瞄碼(scan code)傳送到計算機;

鍵盤掃瞄碼跟具體的硬體有關的,不同廠商對同乙個鍵的掃瞄碼有可能不同。

2.計算機接收到掃瞄碼後,將其交給鍵盤驅動程式;

3.鍵盤驅動程式把這個掃瞄碼轉換為鍵盤偽程式碼;

偽程式碼與具體硬體無關,不同廠商的鍵盤,同乙個鍵的偽程式碼總是相同的。

3.然後,鍵盤驅動程式把該鍵盤操作的掃瞄碼和偽程式碼以及其它資訊傳遞給作業系統;

4.作業系統將獲得的資訊封裝在乙個鍵盤訊息中,並把該鍵盤訊息插入到訊息列隊。

5.通過windows的訊息系統,該鍵盤訊息被送到某個視窗中;

6.視窗所在的應用程式接收到訊息後,可以了解到有關鍵盤操作的資訊,然後決定作出一定的響應

鍵盤訊息:wm_keydown

nvirtkey = (int) wparam; // 偽程式碼

lkeydata = lparam; // 鍵盤操作的相關資訊

鍵盤訊息wm_keydown的第二個引數lparam比較複雜

其作用是指定重複次數、掃瞄碼、擴充套件鍵標記、上下文環境碼、前鍵狀態標記、轉換狀態標記等

lparam: 總長4位元組,32位

0–15位:用於指定當前訊息的重複次數。當使用者按下某個鍵持續一段時間的話,

該值是自動計數的按下某鍵的次數;若按鍵時間很長,則會發出多個訊息,

且重複次數不會累計

16–23:指定掃瞄碼

24:指定是否該鍵是乙個擴充套件鍵(如alt、ctrl),若值為1表示是擴充套件鍵,否則其值為0

25–28:保留

29:指定上下文環境碼。對於wm_keydown、wm_keyup訊息,其值總為0,

對wm_char訊息,如果同時alt鍵被按下,則值為1,否則值為0.

30:指定前鍵狀態。如果訊息傳送前該鍵是按下狀態,其值為1,否則為0

31:指定轉換狀態,對於wm_keydown,其值總為0;

對於wm_char,如果該鍵被釋放,則其值為1,否則為0.

下面就是**

1.新增標頭檔案

#include #include #include
2.新增函式變數宣告

private:

void keypressevent(qkeyevent* );

void keyreleaseevent(qkeyevent *);

//列印按鍵資訊

void printkeyevent(const qstring& straction,

qkeyevent*)const;

3.新增.cpp**

keyboraddialog::keyboraddialog(qwidget *parent) :

qdialog(parent),

ui(new ui::keyboraddialog)

keyboraddialog::~keyboraddialog()

void keyboraddialog::keypressevent(qkeyevent *event)

void keyboraddialog::keyreleaseevent(qkeyevent *event)

void keyboraddialog::printkeyevent(

const qstring &straction,

qkeyevent *event) const

if(mod & qt::controlmodifier)

if(mod & qt::altmodifier)

}

4.執行

starting g:\qtwork\build-keyborad-desktop_qt_5_6_1_mingw_32bit-debug\debug\keyborad.exe...

"按下"

""按鍵**:16777248

掃瞄鍵碼:42

虛擬鍵碼:16

測試組合按鍵:

被按下"抬起"

""按鍵**:16777248

掃瞄鍵碼:42

虛擬鍵碼:16

測試組合按鍵:

"按下"

"d"按鍵**:68

掃瞄鍵碼:32

虛擬鍵碼:68

測試組合按鍵:

"抬起"

"d"

利用QT做乙個簡易登入註冊介面

內容比較簡單,這裡直接給出原始碼 ifndef widget h define widget h include include include include namespace ui class widget public qwidget endif widget h include widge...

如何用做乙個動態的小人(Qt)

一,效果圖如下 void dialog initpixmap 這個函式就是利用的命名形式為 1 數字組成,那個1可以為自己想要名字,qstring new prefix res 1 1.png arg i 1,2,10,qlatin1char 0 這個函式中的引數裡面,第乙個是位址,arg裡面的引數...

需要人做乙個基於unity或者qt的演示系統

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...