我在Windows 8.1 64位上使用qt 5.0.2
在我的应用程序中,我选择listwidget中的项目。每次选择后,会触发一些插槽,并禁用或启用组合框和表格等小部件。我还用stringlist重新填充表的标题或更改每个表项的标志。
我注意到,当我快速选择项目时,选择和显示已更改数据之间存在延迟。 随着小部件数量的增加,这种延迟会增加(最多1秒)。
我的问题是,如果启用/禁用小部件通常会导致qt中显着的性能损失。
答案 0 :(得分:1)
Hack:如果不对每个项目发出dataChanged()
,则不应更新模型的状态。 QTreeView
的速度非常慢(在我的电脑上10k项目的调试模式下大约0.5秒)。
所以解决方案是:
emit dataChanged( QModelIndex(), QModelIndex() ); // hack :)
使用Qt MVC而不是列表小部件是可以预见的,因为QListWidget不是为性能而设计的。
答案 1 :(得分:0)
禁用/启用QWidgets会导致更新小部件外观并付出一些努力,但不是那么糟糕。
在您的应用程序listwidget和其他小部件都在更新,因此更新性能也可能由列表小部件引起。
排除listwidget你可以测试使用一些QPushbuttons来切换一堆小部件。
此外,是使用QGraphicsView / Scene,还是复杂的委托或自定义绘画?