QT Model View Controller 使用和认识

MVC全称是 Model View Controller,是一种非常非常流行的架构模式,相关MVC具体的,网上已经非常非常详尽了,不赘述了。

关于Qt中的MVC

其实Qt中的MVC并不叫MVC,而是叫“MVD”,Qt中没有Controller的说法,而是使用了另外一种抽象: Delegate (委托) ,其行为和传统的MVC是相同的。写过C#的同学肯定对delegate就不陌生了,这里delegate的用法就是负责协调Model和View之间的数据。其思想如下图所示:

Model是唯一和数据集打交道的组件,View不接触数据源,其所需要的数据可以从Model中取出,而Delegate正式负责协调Model和View上数据。这种将view和数据源隔离的方式有几点好处:

1、在处理较大的数据集时每个组件各司其职,不至于降低性能。

2、一个Model可以映射到多个View,这样可以以不同的方式查看数据同一份数据。

3、如果底层数据源的存储改变了,我们只需要处理Model就可以了。

举个具体的例子:

假设如图所示的Data代表一个学校的期末成绩的数据源,Model获取了其中计算机学院的所有学生的成绩,而软件的界面上我们有多个View用于显示不同专业学生成绩的详细,我们只需要从Model中筛选出所需的数据,而筛选的工作正是交给Delegate来做的。

使用Qt预定义组件

Qt为我们预定义了丰富组件类,通常情况下使用这些类就能实现比较好看的视图了。这个例子里我们正式使用QTableView和QStandardItemModel,Delegate在这里不需要关注,默认的Delegate就可以很好的协调Model和View了。 考虑篇幅,我做一个比较小的视图,就不考虑外部的数据源了,数据都是我手动添加的 ,在一个Widget类中我们分别定义一个QTableView和一个QStandardItemModel,其结构大致是这样的:

class demo : public QWidget
{  Q_OBJECT

public:  demo(QWidget *parent = 0);  ~demo();

private:  Ui::demoClass ui;  QStandardItemModel* mModel;
};

ui成员是Qt Designer生成的类,我们的QTableView的对象就在其中(QTableView我直接拖拽上去的,为了节约时间,呵呵),之后再demo的构造函数中我们使用setModel函数就可以把Model和view进行绑定:

demo::demo(QWidget *parent)
: QWidget(parent), mModel(new QStandardItemModel())
{  ui.setupUi(this);  mModel->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("Name")));  mModel->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("Type")));  mModel->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Size")));  mModel->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("Time")));    QList<QStandardItem *> item;  item.append(new QStandardItem(QObject::tr("Qt.css")));  item.append(new QStandardItem(QObject::tr("css")));  item.append(new QStandardItem(QObject::tr("100KB")));  item.append(new QStandardItem(QObject::tr("2016-1-10")));  mModel->appendRow(item);
    ......  ui.mView->setModel(mModel);
}

一些重复的添加数据的工作,我就没有贴出来,这段代码基本上没有接触过Qt的人也能很好的理解,很直观是吧。首先在mModel中设置后表头然后添加数据,到最后调用setModel()函数绑定M/V,之后Delegate就默默地后台工作,帮我们完成View的绘制,其效果图:

当然界面我用qss做了一些美化的工作,感兴趣的朋友可以点击 这里下载到这个demo的源码。

上面例子的不足之处

也许上述的例子已经能满足你的日常需要,但是仍有瑕疵,一个“炫酷”的界面应该具备以下几点 比如1、Name列 要能显示文件类型的ICON ,2 、日期编辑的时候不是允许输入任意字符,当然你可以使用正则表达式过滤输入,但是这仍然不够完美,合理的方法应该是使用一个日历的组件去编辑Time列。

  • 2
时间: 2024-08-18 21:32:36

QT Model View Controller 使用和认识的相关文章

qt model/view 架构自定义模型之QStringListModel

# -*- coding: utf-8 -*- # python:2.x #QStringListModel #QStringListModel 是最简单的模型类,具备向视图提供字符串数据的能力. #QStringListModel 是一个可编辑的模型,可以为组件提供一系列字符串作为数据. #看作是封装了 QStringList 的模型.QStringList 是一种很常用的数据类型,实际上 #是一个字符串列表(也就是 QList<QString>).既然是列表,它也就是线性的数据结构, #因

qt model/view 架构基础介绍之QTreeWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

qt model/view 架构基础介绍之QTableWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作

MVC模式(Model View Controller): Model:DAO模型 View:JSP  在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若目标的相应页面不需要从request里面读取任何信息,则可以使用重定向,可以防止表单重复提交: ------------------------------------------------------------------------------------------------ Stude

qt model/view 架构基础介绍之QListWidget

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt import * from PyQt4 import QtGui, QtCore from PyQt4.QtCore import * import sys # MVC是Model-View-Controller的简写,即模型-视图-控制器 #model/view框架将传统的mv模型分

Model View Controller(MVC) in PHP

The model view controller pattern is the most used pattern for today’s world web applications. It has been used for the first time in Smalltalk and then adopted and popularized by Java. At present there are more than a dozen PHP web frameworks based

Qt Model/View(转)

介绍 Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系.这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提 供一个标准的model接口,使得更多的数据源可以被这些item view使用.这里对model/view的结构进行了描述,结构中的每个组件都进行了解释,给出了一些例子说明了提供的这些类如何使用. Model/View 结构 Model-View-Controller(MVC), 是从Smalltalk发展而来的一种

5.Qt model view设计模式

Introduction to Model/View Programming QT4 介绍了一系列新的 Item View 类,这些类使用Model/View结构来管理数据和数据如何呈现给用户.这种结构使程序员更加灵活的开发和定制呈现数据界面,Model/View结构提供标准的Model接口让各种数据资源都能够被存在的Item View使用. The model/view architecture MVC是一种源于 smalltalk的设计模式,经常用来构建应用程序界面. MVC有3个对象构成.

Qt Model/View( 一)

http://doc.trolltech.com/main-snapshot/model-view-programming.html 介绍 Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系.这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些item view使用.这里对model/view的结构进行了描述,结构中的每个组件都进行了解释,给出了一些例子说明了提供的这些类