我已经设置了一个QAbstractItemModel并用数据填充了它。我的QTreeView小部件正确显示该模型中的每个数据。
现在,我想将该序列化的模型存储在二进制文件中(后来将cource加载到二进制文件中的模型中)。这可能吗?
答案 0 :(得分:0)
与序列化任何内容的方式相同,只需实现一个操作符或方法,将每个数据成员按顺序写入数据流。
首选格式是为您的类型实现这两个运算符:
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<ul class="accordion" data-bind="foreach: items">
<li data-bind="css: {'accordion-open': $data === $parent.openItem()}, click: $parent.openItem">
<div class="header" data-bind="text: header"></div>
<div class="content" data-bind="text: content"></div>
</li>
</ul>
遵循该模式将允许您的类型&#34;即插即用&#34;使用Qt的容器类。
QDataStream &operator<<(QDataStream &out, const YourType &t);
QDataStream &operator>>(QDataStream &in, YourType &t);
没有(或不应该)直接保存数据,它只是底层数据结构的包装器。该模型仅用于为视图提供访问数据的接口。所以实际上你不应该序列化实际模型,而是基础数据。
至于如何序列化实际数据,它取决于您的数据格式,到目前为止仍然是一个谜。但是因为它是QAbstractItemModel
我认为它是某种树,所以一般来说,你必须遍历树并序列化其中的每个对象。
请注意,序列化单个对象时,序列化和反序列化是一个盲序列,但在处理对象集合时,您可能需要考虑其结构以及额外的序列化数据。如果您的树类似于数组数组,只要您使用Qt的容器类,这将为您完成,您所需要的只是实现项类型的序列化,但是对于自定义树,你必须自己做。