网络上的QAbstractItemModel

时间:2016-01-25 11:08:12

标签: qt synchronization qabstractitemmodel

我需要在不同的计算机之间同步模型/转发模型。模型可以表示表格,也可以表示树木(带有子项目的条目)。设置将是:

  • 提供TCP服务(或其他通信)的服务器
    • 保留需要同步的模型列表(代理模型中的registerSourceModel()
    • 为模拟者提供唯一ID给客户
    • 为数据包序列化提供QDataStream
  • 向服务器提供TCP连接的客户端
    • 根据服务器
    • 中的modellist创建NetworkModel个实例
    • 转发/提供任何data()查询到模型
    • 转发/提供任何setData()查询到模型
    • ...其他典型的模型方法

设置同步有两种选择:

  1. 在客户端设置QAbstractItemModel(可能QStandardItemModel),包含完整缓存(所有数据的重复),只需更新远程dataChanged() / layoutChanged()信号< / LI>
  2. 通过网络直接转发任何请求,导致存根(正在加载***)数据条目,直到从网络获取实际数据(dataChanged()信号)
  3. 虽然选项1)将具有相当大的内存打印,因为我们将不得不复制任何相关模型,它将在大多数情况下具有非常短的响应时间,因为同步可以在需要时在后台完成。

    选项2)几乎没有(几乎)没有内存使用,因为所有内容都将被直接查询。当在视图中显示大型模型时,我仍然不确定这将如何实际外观和感觉。考虑一下公司目录(或带有一些细节的亚马逊文章列表)需要逐个查询(data()通过网络在QModelIndex之上工作)。

    结果我们可能会选择第一个选项。

    我在两个选项中遇到的问题是同步/转发有效的QModelIndex。这些在远程计算机上始终无效。我对QSortFilterProxyModel()做了一些研究,因为这有点类似,但在同一个过程空间内。该模型为所有用于映射“过滤”指标的指标保留一个识别列表。

    这是否需要我自己在服务器上保留QPersistantModelIndex()的识别列表,并将ID的映射列表保存到我自己的QModelIndex()(同步列表的这些唯一ID)?

    还有另一个选项可以“链接”两个模型,甚至只是将整个模型放入一个容器并将其输入到我的流中吗?

0 个答案:

没有答案