如何将QAbstractItemModel序列化为QDataStream?

Ral*_*kum 5 serialization qt qabstractitemmodel qstandarditemmodel qdatastream

我已经设置了一个QAbstractItemModel并用数据填充了它.我的QTreeView小部件正确显示该模型中的每个数据.

现在,我想将该序列化的模型存储在二进制文件中(后来将cource加载到二进制文件中的模型中).那可能吗?

dte*_*ech 0

与序列化任何内容的方式相同,只需实现一个运算符或方法,将每个数据成员按顺序写入数据流。

更好的格式是为您的类型实现这两个运算符:

QDataStream &operator<<(QDataStream &out, const YourType &t);
QDataStream &operator>>(QDataStream &in, YourType &t);
Run Code Online (Sandbox Code Playgroud)

遵循该模式将允许您的类型与 Qt 的容器类“即插即用”。

QAbstractItemModel不(或不应该)直接保存数据,它只是底层数据结构的包装。该模型仅用于为视图提供访问数据的接口。因此,实际上您不应该序列化实际模型,而应该序列化底层数据。

至于如何序列化实际数据,这取决于数据的格式,到目前为止这仍然是一个谜。但由于它是一个QAbstractItemModel,我假设它是某种树,所以一般来说,您必须遍历树并序列化其中的每个对象。

请注意,在序列化单个对象时,序列化和反序列化是盲序列,但在处理对象集合时,您可能必须使用额外的序列化数据来考虑其结构。如果你的树类似于数组的数组,只要你使用 Qt 的容器类,就会为你处理好,你所需要的只是实现项目类型的序列化,但是对于自定义树,你将拥有自己做。