我在执行一个应用程序,就像Facebook在QT5。现在在我的应用我只是想查看的个人资料,添加新的和查看配置文件的详细信息。我决定做一个MVC archetecture我的应用程序。我想知道如何的意见/控制器可以与模型类互动
这是我到目前为止:我有几个视图/控制器类(如QT似乎都捣烂成一个),它们分别是:
每个视图使用层叠微件实现
这是我的数据类
该AppModel负载可达数据从一个SQL数据库,DB功能是抽象的。
最后一类是“主类”
我怎样才能通过AppModel和视图之间的数据?
我在想有模型类是单例类和需要的模型类只是得到它的实例的所有意见?
我所讲的可以在这里找到:https://doc.qt.io/archives/qq/qq10-mvc.html
我担心的是这种耦合模型和视图/控制器类太多了?这似乎是一个全局变量播放。
相反,使用原始QWidget
s的,你就可以关闭使用提供使用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
。所以,你可以选择使用这些而不是进入从抽象项目模型/视图继承的麻烦。