我正在Qt5中实现类似于Facebook的应用程序。现在,在我的应用程序中,我只想查看人员的个人资料,添加新的人员并查看个人资料的详细信息。我决定为我的应用程序设计一个MVC架构。我想知道视图/控制器如何与模型类交互
这是我到目前为止的内容: 我有一些视图/控制器类(因为QT似乎将它们融合为一个),它们是:
每个视图都是使用堆叠的小部件实现的
这些是我的数据类
AppModel从SQL DB加载数据,并且抽象了DB函数。
最后一个班级是“主班级”
如何在AppModel和视图之间传递数据?
我当时想让模型类成为单例类,而所有需要模型类的视图都只是获取它的实例?
我在说什么,可以在这里找到: https://doc.qt.io/archives/qq/qq10-mvc.html
我担心的是模型和视图/控制器类之间的耦合过多吗?这似乎在玩一个全局变量。
答案 0 :(得分:0)
与其使用原始的QWidget
,而是使用Qt提供的用于处理MVC体系结构的抽象类(接口?),会更好。即QAbstractItemView
和QAbstractItemModel
。
例如,
#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具有QAbstractListModel
,QAbstractTableModel
和QStandardItemModel
以及QListView
和QTableView
。因此,您可以选择使用它们,而不必麻烦从抽象项目模型/视图继承。