在大量插入后向 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&lt; data_struct * &gt;,而不是使用字符串向量。 QVariant 非常有能力呈现整数和其他类型,因此您不必预先进行转换。

我能想到的最佳建议是运行 gprof 或类似的工具来确定您正在花费时间的确切时间,然后解决该特定问题。

【讨论】:

我已将其更改为使用结构向量,但在可能 10,000 行之后它仍然会减慢应用程序的速度。 您有gprofed 应用程序吗?你是在做一个完整的reset() 还是在每次插入时都进行更新? @MBU 您的数据管理是否与模型分离?我还查看了您发布的代码。它仍然显示使用QList&lt; QVector&lt; QString &gt; * &gt; 而不是std::vector&lt; data_struct &gt;,除了file_namemethod 之外的其他所有内容都应该是数字。检查字符串比整数甚至双精度值更昂贵 对不起。我将我的代码更新为我目前拥有的。在 qt 论坛上。

以上是关于在大量插入后向 QTableView 添加行会减慢应用程序的速度的主要内容,如果未能解决你的问题,请参考以下文章

单元格中的 Excel VBA 换行会减慢合并任务的执行速度

在 QTableView 中插入行

非聚集索引会减慢插入速度吗?

来自模型的数据未插入 QTableView

如何设置qtableview的某一行被选中

提交表单后向mysql添加paypal付款确认