QT性能启用/禁用小组件

时间:2014-03-02 22:42:41

标签: performance qt qt5 windows-8.1 qwidget

我在Windows 8.1 64位上使用qt 5.0.2

在我的应用程序中,我选择listwidget中的项目。每次选择后,会触发一些插槽,并禁用或启用组合框和表格等小部件。我还用stringlist重新填充表的标题或更改每个表项的标志。

我注意到,当我快速选择项目时,选择和显示已更改数据之间存在延迟。 随着小部件数量的增加,这种延迟会增加(最多1秒)。

我的问题是,如果启用/禁用小部件通常会导致qt中显着的性能损失。

2 个答案:

答案 0 :(得分:1)

Hack:如果不对每个项目发出dataChanged(),则不应更新模型的状态。 QTreeView的速度非常慢(在我的电脑上10k项目的调试模式下大约0.5秒)。

所以解决方案是:

  1. 手动更新项目状态,而不是通过项目模型
  2. emit dataChanged( QModelIndex(), QModelIndex() ); // hack :)
  3. 使用Qt MVC而不是列表小部件是可以预见的,因为QListWidget不是为性能而设计的。

答案 1 :(得分:0)

禁用/启用QWidgets会导致更新小部件外观并付出一些努力,但不是那么糟糕。

在您的应用程序li​​stwidget和其他小部件都在更新,因此更新性能也可能由列表小部件引起。

排除listwidget你可以测试使用一些QPushbuttons来切换一堆小部件。

此外,是使用QGraphicsView / Scene,还是复杂的委托或自定义绘画?