近期写了一些Qt的代码,用到了Qt的MVC设计模式,于是仔细看了几遍Qt-MVC的assistant,下面一些基本概念的介绍。

翻译自:qthelp://com.trolltech.qt.485/qdoc/model-view-programming.html

Models

所有的item models都是基于QAbstractItemModel类,这个类定义了一个被视图(views)、委托(delegates)来访问的数据的统一接口。这些数据本身并并不是存储在model中,而是可以保存在一些数据结构、或者一个独立的类提供访问的仓库,比如,文件、数据库、或其他应用中间件。

这些model周边的基本概念在Model Classes的章节介绍。

QAbstractItemModel提供了一个具有足够的灵活性来处理在表格,列表和树的形式表示的数据视图的数据访问接口。然而,当为list和table之类的数据结构实现新的models时,继承QAbstractListModel和QAbstractTableModel类是一个比较好的选择,因为这些类提供了一些常用功能适当的默认实现。这两个类都可以被子类化来作为models,从而支持多种多样的lists和tables实现。

Qt提供了一些现成的model可以用来处理数据项,如下:

  • QStringListModel 用作存储QString类型的list
  • QStandardItemModel用作更复杂的树形结构数据项、其中每一项都可以包含任意的数据。
  • QFileSystemModel 用于提供本地文件系统的文件和目录信息。
  • QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel通常用于使用模型/视图约定来访问数据库。

如果这些现成的models无法满足我们需求,我们可以子类化QAbstractItemModel、QAbstractListModel或者QAbstractTableModel来创建我们自定义的models。

Views

Qt提供了用于不同views的完整实现,如下:

  • QListView 显示一些items的list
  • QTableView用于在table中显示来自于model中的数据。
  • QTreeView显示在hierarchical list中的model items。

这些类都是继承自QAbstractItemView抽象基类。尽管这些类提供现成的完整实现,我们也可以继承这些类进行自定义views。

这些可以可用的views将在View Classes章节介绍。

Delegates

QAbstractItemDelegate是在模型/视图框架代表的抽象基类,自从Qt4.4,默认的委托实现由QStyledItemDelegate提供,这是用作Qt的标准视图默认的委托。然而,QStyledItemDelegate和QItemDelegate是用于绘图和为item在视图中提供编辑器的独立替代品。两者之间的区别在于QStyledItemDelegate使用当前样式来绘制其项目。因此,我们建议实现自定义的委托或使用Qt样式表时使用QStyledItemDelegate作为基类。

Delegates将在Delegates Classes章节详细描述。

Sorting

这里有两种方式在model/view架构中来sort数据,选择哪种方法取决于你的底层模型。

如果model是可以被sort的,比如,如果我们重新实现了QAbstractItemModel::sort()方法,QTableView和QTreeView提供了API可以让我们编程来整理model数据。此外,我们可以启用交互式整理(比如允许用户可以单击单击标题头,来整理数据)。通过连接QHeaderView::sortIndicatorChanged()信号和QTableView::sortByColumn()槽或者QTreeView::sortByColumn()函数。

另一种方法,如果你的模型不具备所需的接口,或者如果您想使用列表视图来显示数据,可以使用代理模式在view中显示数据之前来转换我们model的structure。这将在代理模式章节详细介绍proxy model。

Convenience classes(便捷类)

许多便利类是从标准视图类派生的应用程序,它依赖于Qt的基于项目的项目视图和表类。他们不能被实例化、而仅仅存在提供了在Qt3中的一个熟悉的界面的等价类。比如,QListidget、QTreeWidget、QTableWidget,他们提供一些与Qt3中QListBox、QListiew和QTable相似的功能。

这些类相比view类不太灵活,并且不能随意的使用模型。强烈推荐使用model/view方式来在item views中处理数据,除非你强烈需要一个基于item的一组类。

如果想充分利用由模型/视图方法所提供的功能优势,同时还采用基于item的接口,建议考虑使用views classes,比如QListView、QTbaleView和QTreeView使用QStandardItemModel。

Qt4-MVC(1):MVC模式的一些基本概念
Tagged on:         

One thought on “Qt4-MVC(1):MVC模式的一些基本概念

  • 2016年6月15日 at 下午3:14
    Permalink

    进来看看、了解一下

    Reply

发表评论

电子邮件地址不会被公开。 必填项已用*标注