【2017-06-06】Qt中的鍵盤事件:QKeyEvent及相關處理函數


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下不能用。


免責聲明!

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



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