我有一个问题我正在努力解决但是由于我正在学习Qt的过程中我处于停滞状态,这反过来又引起了对'Qt'方式的怀疑解决问题。虽然在时间复杂度方面是最有效的。所以我逐行读取文件(文件数量在10-2000,000之间)。目前我的方法是将永久行转储到QVector
。
Qvector <QString> lines;
lines.append("id,name,type");
lines.append("1,James,A");
lines.append("2,Mark,B");
lines.append("3,Ryan,A");
假设上述结构,我想给用户三个基于类型字段显示数据的视图。数据以其原始形式以逗号分隔。我的问题是,实现这一目标的最优雅,最有效的方法是什么?
注意:对于视觉辅助,最终结果类型模拟Microsoft访问。因此左侧会有表格列表。在我的情况下,这些表格名称将是分组字段(A,B)的值。当我在这两个列表项之间切换时,中央视图(表格)将重新填充以包含特定的组数据。
我应该将数据分成x个结构吗?或者这会导致不必要的开销?
非常感谢任何帮助
答案 0 :(得分:1)
最后,您需要使用某种实现QAbstractItemModel
的数据模型来公开数据,以及连接到它的一个或多个视图以显示数据。
如果数据不必是可编辑的,您可以实现从QAbstractTableModel
派生的自定义表模型,该模型将文件映射到内存中(使用QFile::map
),并在运行时逐步解析它(实施canFetchMore
和fetchMore
)。
如果数据是可编辑的,那么在解析文件,附加QSqlTableModel
并附加一些视图时,最好将它全部放入临时sqlite表中。
当用户想要保存更改时,您只需遍历模型并将其转储到文本文件中。