gpt4 book ai didi

c++ - 在 Qt 中的数据类(模型)和 View / Controller 类之间传递数据的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:20 25 4
gpt4 key购买 nike

我正在 Qt5 中实现类似于 Facebook 的应用程序。现在在我的应用程序中,我只想查看人员的个人资料,添加新个人资料并查看个人资料的详细信息。我决定为我的应用程序使用 MVC 架构。我想知道 View / Controller 如何与模型类交互

这是我目前所拥有的:我有几个 View / Controller 类(因为 QT 似乎将两者混为一谈)它们是:

  • SingleProfileView (QWidget) <- 显示 1 个配置文件
  • MainView (QWidget)<- 具有导航选项等的主视图
  • ProfileListView (QWidget)<- 它显示了我的应用程序中所有配置文件的列表时刻

每个 View 都是使用堆叠的小部件实现的

  • ProfileView (QWidget) 内部有一个堆叠的小部件,其中包含小部件 ProfileListView 和 SingleProfileView
  • Mainview (QWidget) 有一个包含 ProfileView 的堆叠小部件

这些是我的数据类

  • ProfileModel <- 1 个配置文件的数据
  • ProfileListModel <- 所有配置文件的列表(包含许多配置文件)
  • AppModel <- 包含 ProfileList

AppModel 从 SQL DB 加载数据,DB 函数被抽象化。

最后一个类是“主类”

  • MyApp <- 具有所有 View 和数据的类(我会认为这是 Controller )

如何在 AppModel 和 View 之间传递数据?

我在考虑让模型类成为一个单例类,所有需要模型类的 View 都只获取它的实例?

我所说的可以在这里找到: https://doc.qt.io/archives/qq/qq10-mvc.html

我担心的是模型和 View / Controller 类的耦合是否过多?这似乎是在玩一个全局变量。

最佳答案

与其使用原始的 QWidget,不如使用 Qt 提供的用于处理 MVC 架构的抽象类(接口(interface)?)会好得多。即 QAbstractItemViewQAbstractItemModel .

例如,

#include <QAbstractItemModel>
class MyModel : public QAbstractItemModel
{
// ...
};

#include <QAbstractItemView>
class MyView : public QAbstractItemView
{
// ...
};

从这两个类继承后,您可以实例化它们并调用QAbstractItemView::setModel 来连接您的模型和 View 。 Qt 在后台完成所有工作,因此您无需担心。

例如,

MyModel *model = new MyModel(parent);
MyView *view = new MyView(parent);
view->setModel(model); // magic

为方便起见,Qt 提供了一些基本/部分实现的模型和 View 。例如,Qt 有 QAbstractListModel , QAbstractTableModel , 和 QStandardItemModel连同 QListViewQTableView .因此,您可以选择使用这些,而不是陷入从抽象项模型/ View 继承的麻烦。

另请参阅:Model/View Programming

关于c++ - 在 Qt 中的数据类(模型)和 View / Controller 类之间传递数据的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54527953/

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