zoukankan      html  css  js  c++  java
  • 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  ------->弹起
    
  • 相关阅读:
    docker常用命令
    2020/10/10,饮食男女-对教条主义的补充和现实的摸索
    2020/08/24,约束力
    2020/08/21,迷茫的时候就去工作
    2020/08/21,神秘和平易近人
    2020/08/21,圣人和教条
    2020/07/21,翡翠梦境
    2020/10/10,生活不是阶段式跳跃的,是螺旋式的。
    2020/07/23,再论point,way,moment,time
    2020/07/13,旅游的意义是什么
  • 原文地址:https://www.cnblogs.com/huqi-code/p/10002567.html
Copyright © 2011-2022 走看看