QKeyEvent類用來描述一個鍵盤事件。當鍵盤按鍵被按下或者被釋放時,鍵盤事件便會被發送給擁有鍵盤輸人焦點的部件。
QKeyEvent的key()函數可以獲取具體的按鍵,對於Qt中給定的所有按鍵,可以在幫助中查看Qt: :Key關鍵字。需要特別說明的是,回車鍵在這里是Qt::Key_Return;鍵盤上的一些修飾鍵,比如Ctrl和Shift等, 這里需要使用QKeyEvent的modifiers()函數來獲取,可以在幫助中使用Qt:: KeyboardModifier關鍵字來査看所有的修飾鍵。
QKeyEvent有兩個鍵盤事件成員函數:
void QWidget::keyPressEvent(QKeyEvent *event) //鍵盤按下事件
void QWidget::keyReleaseEvent(QKeyEvent *event) //鍵盤松開事件
這兩個基本上能夠滿足一般的需求了,但是前提是已經獲得焦點的控件已經獲取焦點。具體怎么使用呢?
在頭文件.h中進行聲明:
protected:
void keyPressEvent(QKeyEvent *event); //鍵盤按下事件
void keyReleaseEvent(QKeyEvent *event); //鍵盤松開事件
在.cpp中進行實現相應的功能:
//鍵盤按下事件
void Widget::keyPressEvent(QKeyEvent * event)
{
switch (event->key())
{
//ESC鍵
case Qt::Key_Escape:
qDebug() <<"ESC";
break;
//回車鍵
case Qt::Key_Return:
qDebug() <<"Enter";
break;
//退格鍵
case Qt::Key_Backspace:
qDebug() <<"Back";
break;
//空格鍵
case Qt::Key_Space:
qDebug() <<"Space";
break;
//F1鍵
case Qt::Key_F1:
qDebug() <<"F1";
break;
}
//先檢測Ctrl鍵是否按下
if(event->modifiers() == Qt::ControlModifier)
{
//如果是,那么再檢測M鍵是否按下
if(event->key() == Qt::Key_M)
{
//按下則使窗口最大化
this->setWindowState(Qt::WindowMaximized);
}
}
}
//鍵盤釋放事件
void Widget::keyReleaseEvent(QKeyEvent *event)
{
//方向UP鍵
if(event->key() == Qt::Key_Up)
{
qDebug() << "release: "<< "up";
}
}
分別按下ESC、Enter、Backspace、Space、F1鍵,“應用程序輸出”窗口輸出如下,另外按Ctrl+M鍵也能使窗口最大化:
ESC
Enter
Back
Space
F1
release: up
下表列出了所有的修飾鍵:
Constant | Value | Description |
---|---|---|
Qt::NoModifier | 0x00000000 | No modifier key is pressed. |
Qt::NoModifier | 0x02000000 | A Shift key on the keyboard is pressed. |
Qt::ControlModifier | 0x04000000 | A Ctrl key on the keyboard is pressed. |
Qt::AltModifier | 0x08000000 | An Alt key on the keyboard is pressed. |
Qt::MetaModifier | 0x10000000 | A Meta key on the keyboard is pressed. |
Qt::KeypadModifier | 0x20000000 | A keypad button is pressed. |
Qt::GroupSwitchModifier | 0x40000000 | X11 only. A Mode_switch key on the keyboard is pressed. |