java keypress事件_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()<

});

}

void test::keyPressEvent (QKeyEvent* event)

{

qDebug()<

}

void test::keyReleaseEvent (QKeyEvent* event)

{

qDebug()<

}

按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()<

});

}

void test::keyReleaseEvent (QKeyEvent* event)

{

if(event->isAutoRepeat())

event->ignore();

else

qDebug()<

}

这样输出变为

shortcut --------------->按下

keyReleaseEvent ------->弹起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值