减少画面抖动问题定位记录
发现一个问题
1. 一个 QStackedWidget 包含2个item 高度不一样
2. 切换的时候,界面闪一下
初始觉得
1. 这个不是个大问题
再看一下
1. 其它多个界面也存在类似的场景,没有闪一下
----------------------------------------------------------------------------------------------------------------不要觉得不是大问题,可以对比一下平均水平和较高水平
搜索资料解决问题
给出了多个方法,最终确认是因为:
-
sizeHint()
返回的高度不准确,导致调整后的高度仍然不稳定。 -
页面内容尚未完全布局/渲染,导致
sizeHint()
计算不准确。 -
父布局仍在调整,导致
QStackedWidget
尺寸变化滞后。 -
Qt 的事件循环延迟,信号触发时 UI 尚未完成更新。---可能是这个原因
connect(stackedWidget, &QStackedWidget::currentChanged, [=](int index) { QWidget* page = stackedWidget->widget(index); QTimer::singleShot(0, [=] { // 下一个事件循环再调整 stackedWidget->setFixedHeight(page->sizeHint().height()); }); });
办法来解决问题,修改后,确保了渲染完成之后再更新尺寸,不再抖动。
---------------------------------------------------------------事情还是要精益求精,细节中隐藏的竞争力和产品的客户满意度