我是老Delphi / FreePascal / Lazarus程序员。我用一年的Qt和C ++编程。在Qt中对我来说最痛苦的是模型编程。特别有效。例如,用100万条记录填充QStandardItemModel需要大约15秒,700MB内存使用率和QTreeView滚动几乎是不可能的(100%CPU,似乎每个滚动验证甚至不可见的项目)。为了比较,在Lazarus我有TVirtualTreeView,我覆盖一个虚拟方法OnGetData。在参数中,我获得行和列索引并从TList(类似于QList)或动态数组返回数据。结果:填充100万条记录= 150毫秒,RAM中为+ 20MB,完全负责滚动(仅对可见项目调用OnGetData)。我也尝试使用QAbstractItemModel,大量编码,我只减少了内存使用量(不是那么多)。
我的问题:模型编程还有其他选择吗?几个月前,我在QTreeView中看到了自定义数据集的教程,但现在无法找到它。他们使用简单的QList并在QTreeView中覆盖了一些方法。
此致
答案 0 :(得分:2)
直接从QAbstractItemModel派生您自己的模型。将其用作自定义(高效)数据存储的接口。
答案 1 :(得分:2)
好的,我在阅读QAbstractItemModel
文档时仔细重写了我的模型。我减少了很多内存使用量,但在滚动100万条记录时仍然有滞后。我将QTreeView
更改为QListView
/ QTableView
,一切都运行得非常快。所以我检查了QTreeView属性并禁用了itemsExpandable
并检查了uniformRowHeights
。最后我的观点是快速而激烈的:)。加载1毫升记录= 1秒,在RAM中加上140MB,平滑滚动没有滞后。谢谢!