QT 之鍵盤事件(捕獲鍵盤按下、松開事件))
我們在做軟件時候,經常會碰到這樣的場景,比如按下F5進行刷新功能,按下F1進行幫助之類的快捷鍵方式。那么在QT中該怎樣做呢?
查閱文檔,QT已經實現了這一系列的鍵盤事件
1 void QWidget::keyPressEvent(QKeyEvent *event) //鍵盤按下事件
2 void QWidget::keyReleaseEvent(QKeyEvent *event) //鍵盤松開事件
這樣兩個都基本上能夠滿足一般的需求了,但是前提是已經獲得焦點的控件已經獲取焦點。具體怎么使用呢?
在控件的頭文件.h中進行聲明:
1 protected: 2 virtual void keyPressEvent(QKeyEvent *ev); 3 virtual void keyReleaseEvent(QKeyEvent *ev);
在.cpp中進行實現相應的功能:
1 void MainForm::keyPressEvent(QKeyEvent *ev) 2 { 3 if(ev->key() == Qt::Key_F5) 4 { 5 ui->stackedWidget->reloadPage(); 6 return; 7 } 8
9 QWidget::keyPressEvent(ev); 10 } 11
12 void MainForm::keyReleaseEvent(QKeyEvent *ev) 13 { 14 if(ev->key() == Qt::Key_F5) 15 { 16 ui->stackedWidget->reloadPage(); 17 return; 18 } 19
20 QWidget::keyReleaseEvent(ev); 21 }
在一些程序中,我們發現這樣並不好使,怎么回事呢? 這時候可以試試在構造函數中添加這個函數,使其具有捕獲鍵盤事件的能力:
this->grabKeyboard();