我是一名老 Delphi/FreePascal/Lazarus 程序员。我用 Qt 和 C++ 编程已有一年了。 Qt 对我来说最痛苦的是模型编程。特别高效。例如,用 100 万条记录填充 QStandardItemModel 大约需要 15 秒,700MB 内存使用量和 QTreeView 滚动几乎是不可能的(100% CPU,似乎每个滚动都会验证甚至不可见的项目)。为了进行比较,在 Lazarus 中,我有 TVirtualTreeView,其中我重写了一个虚拟方法 OnGetData。在参数中,我获取行和列索引,并从 TList(类似于 QList)或动态数组返回数据。结果:填充 100 万条记录 = 150 毫秒,+20MB RAM,完全负责滚动(仅对可见项调用 OnGetData)。我还尝试使用 QAbstractItemModel,进行大量编码,但仅减少了内存使用量(不是那么多)。
我的问题:模型编程有其他选择吗?几个月前,我看到了 QTreeView 中自定义数据集的教程,但现在找不到了。他们使用简单的 QList 并重写 QTreeView 中的一些方法。
问候
最佳答案
直接从 QAbstractItemModel 派生您自己的模型。将其用作自定义(高效)数据存储的接口(interface)。
关于Qt 模型替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25557235/