记一次Ubuntu系统排查Qt界面刷新卡顿问题

背景

Qt界面应用原先运行在内核版本为Linux nvidia 5.10.104-tegra #1 SMP PREEMPT…的Ubuntu20.04系统之上,由于种种原因,需要将该应用移植到内核版本为Linux nvidia 5.10.104-tegra #4 SMP PREEMPT…的Ubuntu20.04之上。期间,两者Qt版本相同,依赖的第三方库也一致,唯一的不同就在于内核的build号。

问题

移植后,界面程序正常启动,QLable显示QImage图片偶现整个控件黑屏;其他界面如果有用到QLayout布局,显示/隐藏布局内控件,偶发控件隐藏不掉或者隐藏掉了,控件所占页面位置还在,期间,如果不加人为干预,需要等5-10s钟左右的时间方能自行刷新。

排查方法

  1. 通过现象,疑是qt应用程序中使用Layout布局在此系统中会出现刷新问题。遂单独写一demo,使用Layout布局,实现布局内控件显示/隐藏。然卡顿现象未现,显示/隐藏功能皆正常。故排除是Layout布局所致;
  2. 继续分析问题,疑是项目中出现卡顿页面子控件太多,样式复杂,导致页面刷新不及时。遂将出现问题页面引入测试demo,运行后,控件显示/隐藏亦正常。而后将页面样式皆除,行之亦然。故亦排除控件多、样式繁等因素;
  3. 缘由大多数页面使用QStackedWidget实现页面切换,切换之时刷新卡顿概率剧增。故重写QStackedWidget,在切换显示后增加QApplication::ProcessEvent(),运行过后,页面切换效果稍好,但QLayout布局内控件的显示/隐藏卡顿依然存在,终归是未解决问题之根本。
  4. 到此已黔驴技穷,无计可施矣!然问题依旧在,解不掉,许多愁。
  5. 回归项目本身,写单元测试,将出问题之页面独显,操作控件显示/隐藏,极丝滑…内心陡生思,疑是某一页面创建后致使整个应用刷新异常。
  6. 重捋项目整体结构,发现除一处Opengl实时刷新图片外,再无可疑之处,遂改Opengl为QLabel,由GPU变CPU刷新,行之,一切页面刷新尽皆如常,内心释然。此刻,只想用“山重水复疑无路,柳暗花明又一村”、“沉舟侧畔千帆过,病树前头万木春”抒发胸中之情。
  7. 既已找到“病因”,后续对症下药即可,冲浪找资料,网上遇同病之人颇多,皆无根治良方。遂求于NVIDIA厂商,亦递交复现之法,望其后续能有解决之道也。外求之余,得幸于改为QLabel后,对应用本身并无多影响,故暂用此法推进,后续良方亦跟进矣。

总结

一切问题,皆有因果。如果觉得困难,不妨再坚持坚持,答案终会在坚持不懈后出现,历经艰辛过后总会有一种“回首向来萧瑟处,归去,也无风雨也无晴”那般洒脱之感。技术之路,浩瀚如海,吾愿作小舟一芥,长风破浪,直挂云帆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值