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  ------->弹起
    
  • 相关阅读:
    毕业一年的广州之行
    js一个抽奖的例子
    关于position:absolute的困惑
    px,pt,em,rem
    HTML4.01和XHTML1.0和XHTML1.1的一些区别
    通过微信分享链接,后面会被加上from=singlemessage&isappinstalled=1可能导致网页打不开
    windows无提示关闭页面
    canvas画随机闪烁的星星
    angular背景图片问题
    Python爬虫(二)— Python3内置模块 Urllib
  • 原文地址:https://www.cnblogs.com/huqi-code/p/10002567.html
Copyright © 2011-2022 走看看