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

本文详细介绍了Qt中如何处理键盘事件,包括QKeyEvent类的使用,如何通过key()和modifiers()函数获取按键和修饰键信息,以及如何在QWidget中重写keyPressEvent和keyReleaseEvent函数来响应键盘按下和释放事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


下表列出了所有的修饰键:

ConstantValueDescription
Qt::NoModifier0x00000000No modifier key is pressed.
Qt::NoModifier0x02000000A Shift key on the keyboard is pressed.
Qt::ControlModifier0x04000000A Ctrl key on the keyboard is pressed.
Qt::AltModifier0x08000000An Alt key on the keyboard is pressed.
Qt::MetaModifier0x10000000A Meta key on the keyboard is pressed.
Qt::KeypadModifier0x20000000A keypad button is pressed.
Qt::GroupSwitchModifier0x40000000X11 only. A Mode_switch key on the keyboard is pressed.

转载于:https://www.cnblogs.com/linuxAndMcu/p/11023299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值