Qt事件系统之三:键盘事件

QKeyEvent类用来描述一个键盘事件。当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输人焦点的部件。

QKeyEvent的key()函数可以获取具体的按键,对于Qt中给定的所有按键,可以在帮助中查看Qt: :Key关键字。需要特别说明的是,回车键在这里是QtKey_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.

你可能感兴趣的:(QT学习)