什么是Qt中的数据通信类(模型)和View / Controller类之间数据的正确方法是什么?

问题描述 投票:1回答:1

我在执行一个应用程序,就像Facebook在QT5。现在在我的应用我只是想查看的个人资料,添加新的和查看配置文件的详细信息。我决定做一个MVC archetecture我的应用程序。我想知道如何的意见/控制器可以与模型类互动

这是我到目前为止:我有几个视图/控制器类(如QT似乎都捣烂成一个),它们分别是:

  • SingleProfileView(QWidget的)< - 显示1个轮廓
  • 的MainView(QWidget的)< - 其具有导航选项主视图..等
  • ProfileListView(QWidget中)< - 这是用我自己的应用程序的所有配置文件列表的时刻

每个视图使用层叠微件实现

  • ProfileView(QWidget的)具有内部包含窗口小部件ProfileListView和SingleProfileView堆叠插件
  • MAINVIEW(QWidget的)具有堆叠插件包含ProfileView

这是我的数据类

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

该AppModel负载可达数据从一个SQL数据库,DB功能是抽象的。

最后一类是“主类”

  • MyApp的< - 有各方面的意见和数据类(我认为这是控制器)

我怎样才能通过AppModel和视图之间的数据?

我在想有模型类是单例类和需要的模型类只是得到它的实例的所有意见?

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

我担心的是这种耦合模型和视图/控制器类太多了?这似乎是一个全局变量播放。

c++ qt model-view-controller model-view qtwidgets
1个回答
0
投票

相反,使用原始QWidgets的,你就可以关闭使用提供使用Qt意味着粗暴对待MVC架构的抽象类(接口?)要好得多。即,QAbstractItemViewQAbstractItemModel

例如,

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

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

一旦你从两个类继承,你可以实例化他们,并呼吁QAbstractItemView::setModel连接您的模型和视图。 Qt的做所有在后台,所以你不必担心。

例如,

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

为方便起见,Qt提供一些基本的/部分实现的模型和视图。例如,Qt的具有QAbstractListModelQAbstractTableModel,并用QStandardItemModelQListView沿QTableView。所以,你可以选择使用这些而不是进入从抽象项目模型/视图继承的麻烦。

参见:Model/View Programming

© www.soinside.com 2019 - 2024. All rights reserved.