在大量插入后向 QTableView 添加行会减慢应用程序的速度
Posted
技术标签:
【中文标题】在大量插入后向 QTableView 添加行会减慢应用程序的速度【英文标题】:Adding row to QTableView slows the app down after a lot of inserts 【发布时间】:2012-01-19 20:53:09 【问题描述】:我有一个 QTableView,它使用了我制作的模型,它扩展了 QAbstractTableModel。该模型使用
QList< QVector<QString> * >
作为集合。表格视图用于显示来自应用程序的日志消息,因此集合最终会变得非常大......在它插入几千行之后,我注意到表格视图开始变慢很多,最终视图冻结了几秒钟在刷新之前.. 是不是我使用的集合类型让它变慢了很多?有没有更好的方法来存储正在插入的数据? QTableView 是否支持大量数据?
编辑
Qt 论坛上发布的代码: http://www.qtforum.org/article/37326/qttableview-slows-down-when-a-lot-of-data-is-inserted.html
【问题讨论】:
你的数据方法是什么样的?还有如何将数据插入模型? 【参考方案1】:我已成功使用 QTableView
显示 ~10000 行,因此 QTableView
能够支持它,但您的收藏仍有待改进。
QList
在中间插入非常昂贵,因为您必须重新分配位于您尝试插入的索引下方的所有内容,当然您只是在移动指针,但仍然如此。
通常对于数据存储,我会使用std::vector< data_struct * >
,而不是使用字符串向量。 QVariant
非常有能力呈现整数和其他类型,因此您不必预先进行转换。
我能想到的最佳建议是运行 gprof
或类似的工具来确定您正在花费时间的确切时间,然后解决该特定问题。
【讨论】:
我已将其更改为使用结构向量,但在可能 10,000 行之后它仍然会减慢应用程序的速度。 您有gprof
ed 应用程序吗?你是在做一个完整的reset()
还是在每次插入时都进行更新?
@MBU 您的数据管理是否与模型分离?我还查看了您发布的代码。它仍然显示使用QList< QVector< QString > * >
而不是std::vector< data_struct >
,除了file_name
和method
之外的其他所有内容都应该是数字。检查字符串比整数甚至双精度值更昂贵
对不起。我将我的代码更新为我目前拥有的。在 qt 论坛上。以上是关于在大量插入后向 QTableView 添加行会减慢应用程序的速度的主要内容,如果未能解决你的问题,请参考以下文章