• Qt keyPressEvent keyReleaseEvent 分析


    最近使用Qt时,在增加一个按下某键(M),临时显示图层,键(M)弹起时隐藏图层的功能时,碰到了一些问题: keyPressEvent 事件不响应

    这个问题,网上搜到的结果是可能是控件没获取焦点,比如QPushButton一直占着焦点,可是界面上并没有焦点,而且,在keyPressEvent 和keyReleaseEvent 中同时打出日志,keyReleaseEvent 里面是可以响应的

    最后找出来结果是因为在其余地方使用了快捷键,代码如下:

    test::test()
    {
        QShortcut* shortcut = new QShortcut(QString("M"),this);
        QObject::connect( shortcut ,&QShortcut::activated,[=]{
            qDebug()<<"shortcut";
        });
    }
    
    void test::keyPressEvent (QKeyEvent* event)
    {
        qDebug()<<"keyPressEvent ";
    }
    void test::keyReleaseEvent (QKeyEvent* event)
    {
        qDebug()<<"keyReleaseEvent ";
    }
    

    按M的时候输出:

    shortcut--------------->按下
    keyReleaseEvent 
    shortcut
    keyReleaseEvent 
    shortcut
    keyReleaseEvent 
    ...
    shortcut
    keyReleaseEvent ----->弹起
    

    也就是说设置快捷键之后,是无法触发keyPressEvent 事件的

    如果想去掉中间重复的这部分,可以这样(网上搜索说是要自己设置flag,额,我没设置flag,好像也没什么问题)

    test::test()
    {
        QShortcut* shortcut = new QShortcut(QString("M"),this);
        shortcut ->setAutoRepeat(false);
        QObject::connect( shortcut ,&QShortcut::activated,[=]{
            qDebug()<<"shortcut";
        });
    }
    
    void test::keyReleaseEvent (QKeyEvent* event)
    {
       if(event->isAutoRepeat())
          event->ignore();
       else
          qDebug()<<"keyReleaseEvent ";
    }
    

    这样输出变为

    shortcut --------------->按下
    keyReleaseEvent  ------->弹起
    
  • 相关阅读:
    YAOI Summer Round #4 (Div.2) 题解
    2021 暑假集训(福建师大附中)
    YAOI Round #7 题解
    YAOI Round #5 题解
    插头DP
    四边形不等式
    YAOI Round #3 题解
    关于 2020 年
    图论相关性质和结论(基础)
    斜率优化 DP :Luogu P2365 P5785「SDOI2012」任务安排 & 弱化版
  • 原文地址:https://www.cnblogs.com/huqi-code/p/10002567.html
Copyright © 2020-2023  润新知