这是Qt模型/视图架构无用的情况吗?

时间:2010-04-08 01:06:18

标签: model-view-controller qt

我正在编写一个基于GUI的应用程序,我每隔几秒就从串口读取一串值,我需要在某些类型的图形指示器中显示大部分值(我想的是QprogressBar),它显示了范围和价值。我从字符串中解析的其他一些数据是日期和错误代码。此外,数据是分层的。

我想使用Qt的模型/视图架构,因为我对MVC的东西感兴趣了一段时间,但从来没有完全围绕如何很好地实现它。

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

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

在我看来,只是将QWidget子类化,然后从串口读入并从子类更新所有子窗口小部件(图形指示器,标签等等)可能更好。基本上,在一个班级中做所有事情。

有没有人理解这个问题可以向我解释我错过了什么,或者为什么我不应该这样做。截至目前,我有点困惑。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

** ** - 这是Qt模型/视图架构无用的情况吗?
我不得不说 - 结束编辑

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

首先,我们来谈谈MVC显示模式。这种模式就是将程序分解为具有各自关注领域的独立(并且希望可测试)部分。

  1. 模型是描述数据的数据结构。我确信还有一些统计数据。重要的是,模型不知道如何向用户显示数据。
  2. 视图是如何向用户呈现信息的。不应该关心如何呈现数据以进行显示。重要的是,该层不知道模型如何获取数据以供显示。
  3. 控制逻辑是将前两个项目连接在一起的“粘合剂”。这个层可以容纳所有“杂乱”的东西,以达到良好的用户体验。 编辑 - QT称之为“查看项目”的大部分内容我可能会放在控制器层中。
  4. 但是如果你这样做,那么模型和控制器层就变得非常可测试了。

    话虽如此,你的许多观点与MVC模式并不真正相关。您似乎在讨论什么是显示数据的最佳方式。这总是一个问题。如果没有看到你的应用程序,我真的不会试图告诉你什么会好看。

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

    话虽如此,我现在正在处理这个问题,这种模式对我来说很有效。如果你去codeplex.com并搜索mvvm(模型 - 视图 - 视图模型,WPF中使用的术语),你会看到许多使用它的项目,你可以使用它来获取更多信息。

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