zoukankan      html  css  js  c++  java
  • 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
    

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

    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.
  • 相关阅读:
    【WPF】绘制柱状图、折线图、扇形图
    【WPF】获取容器宽高
    【SQL】SQL Server、MySQL、SQLite获取自增ID、自增ID清零
    【SQL Server操作】SQL Server重命名数据库及解决数据库无法分离的问题
    【数据迁移】MySQL数据库迁移到SQL Server
    【MySQL操作】MySQL导入导出数据库
    【MySQL操作】MySQL Workbench远程连接的一些操作
    【c#】遍历获得一个类的所有属性名
    vue 跨域 springCloud @CrossOrigin注解
    解决IDEA右侧maven不显示方法
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/11023299.html
Copyright © 2011-2022 走看看