Model view controller 这是不是Qt模型/视图体系结构没有用处的情况?

Model view controller 这是不是Qt模型/视图体系结构没有用处的情况?,model-view-controller,qt,Model View Controller,Qt,我正在编写一个基于GUI的应用程序,每隔几秒钟从串行端口读取一组值,我需要在某种类型的图形指示器中显示大多数值(我想可能是QprogressBar),该指示器显示范围和值。我正在从字符串解析的其他一些数据是日期和故障代码。此外,数据是分层的 我想使用Qt的model/view架构,因为我对MVC的东西感兴趣已经有一段时间了,但是我从来没有想过如何很好地实现它 到目前为止,我已经对QAbstractItemModel进行了子类化,在该模型中,我读取串行端口,并将从字符串解析的项包装到树数据结构中。

我正在编写一个基于GUI的应用程序,每隔几秒钟从串行端口读取一组值,我需要在某种类型的图形指示器中显示大多数值(我想可能是QprogressBar),该指示器显示范围和值。我正在从字符串解析的其他一些数据是日期和故障代码。此外,数据是分层的

我想使用Qt的model/view架构,因为我对MVC的东西感兴趣已经有一段时间了,但是我从来没有想过如何很好地实现它

到目前为止,我已经对QAbstractItemModel进行了子类化,在该模型中,我读取串行端口,并将从字符串解析的项包装到树数据结构中。我可以在QtreeView中查看所有数据,没有任何问题

我还开始将QAbstractItemView子类化,以使用所有图形指示器等构建自定义视图。这就是我被卡住的地方。在我看来,为了设计一个知道如何显示自定义模型的视图,视图需要确切地知道模型中所有数据的组织方式。这不是违背了模型/视图的目的吗?我测试模型时使用的QTreeView基本上只是在树结构中显示模型,但我不想这样做,因为数据的类型不尽相同。在您是否应该使用此体系结构时,数据的类型或向用户呈现数据的方式是否是一个决定因素?我一直认为用MVC风格设计总是更好的

在我看来,最好只是将QWidget子类化,然后从串行端口读入并更新子类中的所有子部件(图形指示器、标签等)。基本上,在一节课上做每件事

有没有人理解这个问题,可以向我解释我遗漏了什么或者为什么我不应该这样做。现在我有点困惑

非常感谢你的帮助

***-这种情况下Qt模型/视图体系结构没有用处吗?
我要说的是不一定-结束编辑

我不确定我是否完全理解你的问题,但让我试试

首先,让我们讨论一下MVC显示模式。这个模式是关于将程序分成单独的(希望是可测试的)部分,这些部分有自己的关注点

  • 模型是描述数据的数据结构。我确信也存在一些统计数据。重要的是,模型不知道数据将如何显示给用户
  • 视图是信息如何呈现给用户的。它并不关心数据如何呈现以供显示。重要的是,该层不知道模型如何获取数据以供显示
  • 控制逻辑是将前两个项目连接在一起的“粘合剂”。这一层包含所有“杂乱”的东西,以获得良好的用户体验。编辑-大部分QT称之为“视图项目”的内容我可能会放在控制器层中
  • 但是如果您这样做,那么模型和控制器层将变得非常可测试

    尽管如此,您的许多观点与MVC模式并没有真正的联系。您似乎在讨论什么是显示数据的最佳方式。这始终是一个问题。在没有看到您的应用程序的情况下,我不会真正尝试告诉您什么是好的

    但是,通过遵循良好的MVC模式设计,您可以对显示进行非常重要的修改,而不会影响下面的代码

    话虽如此,我现在正在处理这个确切的问题,并且这个模式在我看来运行良好。如果您访问codeplex.com并搜索mvvm(model-view-viewmodel,WPF中使用的术语),您将看到许多使用它的项目,您可以使用它来获取更多信息


    如果这还不够,请告诉我,我也许可以给你一个更好的答案。

    非常感谢。这很有帮助。让我澄清一下。假设我有10个电压、10个温度、日期/时间和3个状态代码,我从串行端口接收的字符串中解析。现在,我不想将数据放在树、列表、表格或饼图中。我nstead我想要有电压和温度的图形指示器,一个显示时间的标签,状态代码的标签,以及其他计算值的标签。这看起来像是一个自定义视图,需要知道模型的确切内容。所以,我想知道MVC在这种情况下是否仍然有用?这有意义吗?是的,MVC是这仍然是一个好模式。因为控制器层将整合您的读数(模型),以便向视图(仪表)演示。如果您将所有复杂的数据操作逻辑放入控制器层,那么您就只剩下更简单的模型层和视图层。控制器层可以进行全面的单元测试,因为它不需要连接到实时数据。当您开始使用时,这似乎有些过分。但一旦您开始理解它,它确实会带来很多好处有道理。酷…谢谢你的帮助。有了你的帮助和大量的阅读,我想我开始理解得更好了。