Qt4.8与Qt5.12keyPressEvent函数差异

在将Qt5.12程序迁移到Qt4.8时,发现上下键无法在按钮间切换焦点。问题在于4.8环境下,上/下键事件未到达父窗体。分析发现可能基类处理了这些键事件。通过事件过滤器解决:在按钮类中安装事件过滤器,允许事件传递给父窗体,从而实现焦点切换。
摘要由CSDN通过智能技术生成

现象

最近将程序从x86_64 Qt5.12向arm Qt4.8环境上迁移时,遇到上下键导航焦点在4.8下不起作用的情况。
基本场景如下:在窗体Widget中包含若干按钮,依次为button1, button2, button3,默认button1存在焦点,按下上/下键后,焦点会在这三个按钮上来回切换。
Qt5.12实现方案:
1)在按钮类中重载 virtual void keyPressEvent(QKeyEvent *event); 对于上/下键,event->setAccepted(false);使其向父窗口传递。
2)在窗体类中重载 virtual void keyPressEvent(QKeyEvent *event); 对于上/下键,触发焦点切换。

分析

arm 4.8环境下,调试发现父窗体始终未收到上下键事件。
该开始怀疑键值不正确,打印发现键值不存在问题。
后来在按钮类中,不处理上/下键,采用QPushButton默认的keyPressEvent处理,效果和修改前是一样的。所以推测,在QPushButton的基类中,可能某个类对上/下键做了处理,导致该事件未被发送到父窗体。
所以问题变为:如何让上/下键事件不被QPushButton的基类处理呢?
后来在qt事件传递过程和处理发现事件过滤器。

解决方案

事件过滤器的基本使用场景:
对象A和对象B均继承于QObject&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值