QSqlQueryModel搭配QTableView使用卡死问题

在项目中发现了QSqlQueryModel搭配QTableView使用卡死的问题,以本文记录下来。

现象

用QSqlQueryModel关联数据库的表格,用QTableView把QSqlQueryModel的数据显示出来。
当表格行数添加到9时,界面会卡死,类似下图的场景。
QSqlQueryModel搭配QTableView使用卡死问题_第1张图片
修改数据库,把行数减到8或加到10行,卡死的现象消失。

原因

经过测试,卡死的原因是QTableView的水平滚动条显示机制有bug。
项目中滑动条采用了ScrollBarAsNeeded模式,在该模式下,表格显示不完整时,会显示滑动条,表格显示完整时,会隐藏滑动条。
如果表格高度加上滑动条高度与QTableView的高度相差不大,像上图那样,可能Qt内部会出现了判断错误的情况(目前的推断,后续有空再看源码确认),一下子认为滑动条需要显示,一下子又认为滑动条不需要显示,不停地闪烁,导致界面卡死。

解决方法

1、如果出现这种情况,那就判断表格是否需要水平滚动条,需要就设为ScrollBarAlwaysOn,不需要就设为ScrollBarAlwaysOff,就不存在闪烁的问题了。

你可能感兴趣的:(Qt笔记,qt,开发语言)