QKeyEvent及其相關的處理函數,比如QKeyPressEvent、QKeyReleaseEvent()等在QtGui編程中非常常用,尤其是需要借助標准鍵盤的編碼來實現一些自定義功能的時候。
這算是QtGui編程中非常基礎的東西,但如果事先沒仔細了解手冊中關於這一部分的介紹的話,還是有不少坑的。
為什么想起來寫這個呢?之前的一個項目用了使用標准鍵盤芯片做的面板,但有一部分按鍵的key()是重復的,以前在Linux-Arm中底層編碼傳遞上的鍵值在拋出QKeyEvent事件時做了處理,所以沒有重復鍵值,因此這次是在Windows系統下編程,就有點想當然了,當發現鍵值重復時總是認為鍵盤硬件可能出了問題。
直到專門做了一個鍵值檢測程序,在Win7上運行發現使用key()時,比如左右shift鍵的鍵值是一樣的,但是看了下手冊,它們的nativescancode()卻是不一樣的,於是就采用nativescancode()來區分不同的按鍵,果然是可以的。
這也說明,有空要多看下手冊,多做點實例程序。
問題一:
使用QKeyEvent的e->key()來獲取鍵值
void Widget::keyPressEvent(QKeyEvent *e)
{
int key = e->key();
qDebug()<<key;
}
但鍵盤上左右功能鍵,獲取的鍵碼是一樣的,比如左右shift鍵、左右ctrl鍵以及左右alt鍵,編碼一樣,如何區分?
解決:
如果是在Windows/Linux系統中,請使用QKeyEvent::nativescancode()來區分鍵值,這樣就是唯一的;
但是這個函數在MacOS下不能用。
