Qt 模型替代方案

标签 qt

我是一名老 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/

相关文章:

c++ - 为 QTreeView 覆盖 QStyledItemDelegate 中的文本

c++ - 在 C++ 代码中访问 PWD

C++ QT : QTableWidget; how to let the user select text in a cell but not edit it

qt - 强制 QWebEngine 使用软件渲染

c++ - 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?

c++ - Qt C++ - QList<float**> 类型不允许

c++ - 如何使用 Qt 与 boost::scoped_ptr<QWidget> 的连接

C++ Qt : is it possible to create a sort of template slot?

python - 从 GUI 类外部访问 GUI 元素

python - PyQt4 应用程序按钮不起作用