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

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

猜你喜欢

转载自www.cnblogs.com/linuxAndMcu/p/11023299.html