gpt4 book ai didi

qt - 如何正确实现同一数据集的不同 View 选项

转载 作者:行者123 更新时间:2023-12-03 10:46:09 24 4
gpt4 key购买 nike

我目前正在构建模型 View 架构,遇到了一个我无法在互联网上找到信息的问题。

我有一组复杂的数据,我想以两种(或更多)不同的方式向用户展示:

  • 显示完整数据
  • 仅显示
  • 中的选定(部分)信息

    打印这些数据的方式对我来说无关紧要,但如果这有帮助,它可以在表格 View (基本信息)或列 View (完整信息)中。这两个类来自 QT 模型/ View 框架。

    现在我想到了两个选项来实现这个并且想知道我应该使用哪个

    选项1
  • 我建立我的数据结构,
  • 将其包含在自定义模型中
  • 专门(子类)查看类,以便只打印我感兴趣的内容。

  • 选项 2
  • 我建立我的数据结构,
  • 专门化我的模型,只提供对相关数据的访问
  • 使用标准 View 在屏幕上打印。

  • 老实说,我会选择选项 2,但是看到互联网上使用选项 1 的案例数量,我开始怀疑我是否做得对。 (当模型的多个 View 似乎非常频繁时,我从未发现任何数据的双重模型示例)

    在 View 类中放置与数据相关的处理对我来说似乎是错误的,但是复制数据模型会导致重复数据(这似乎也是错误的)或共享数据(然后模型不再“持有”数据)

    我还查看了 QT 代表,但这些类主要是为了改变数据的外观。我没有找到一种使用委托(delegate)来忽略与一个 View 无关的数据的方法。

    最佳答案

    您完全正确地认为使用 View 过滤数据是错误的。重新实现 View 的唯一原因是对相同数据有不同的 View 或对用户事件进行特殊处理。

    所以有两种方法可以过滤掉一个数据:

    1.创建两个共享数据的模型。这是一个标准 recommended方法 - 不要将数据保存在模型中。

    2.创建一个提供所有数据的模型并创建一个继承自QSortFilterProxyModel的代理模型过滤掉数据。

    您需要重新实现 filterAcceptsColumn过滤掉列和filterAcceptsRow的方法过滤掉行。

    然后使用 View-Model显示所有数据或View-Proxy-Model显示一些数据。

    关于qt - 如何正确实现同一数据集的不同 View 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552873/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com