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.
  • 相关阅读:
    第五天——编码进阶(三)
    vue系列---------vuejs基础学习3.0
    前端随心记---------vuejs基础学习2.2
    前端随心记---------HTML5+CSS系列5.0
    前端随心记---------Ajax
    前端随心记---------前后端验证用户名案例(php,mysql结合)
    前端随心记---------MySQL
    前端随心记---------PHP
    vue系列---------vuejs基础学习2.1
    前端随心记---------HTML5+CSS系列4.0
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/11023299.html
Copyright © 2011-2022 走看看