1、模型、视图、委托
MVC包含模型(Model表示数据)、视图(View用户界面)、控制器(Controller界面对用户输入的反应方式)三部分,Qt中还引入了委托(Delegate,又称代理)来对用户输入进行灵活处理,使用它可以定制数据的渲染和编辑方式。
QAbstractItemModel是模型的抽象基类,其子类有:QAbstractListModel是列表模型抽象类、QAbstractTableModel是表格模型抽象类、QStringListModel是文本列表模型,QStandardItemModel是标准项模型,QFileSystemModel是文件系统模型,QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel用来访问数据库。
QAbstractItemView是视图的抽象基类,QListView是列表视图类, QTableView是表格视图类,QTreeView是树型视图类,可以子类化它们来定制视图。
QAbstractItemDelegate是委托的抽象基类,其子类有QStyledItemDelegate和QItemDelegate。
下面是使用文件系统模型、列表视图、树形视图的例子:
#include <QApplication> #include <QTreeView> #include <QListView> #include <QFileSystemModel> #include <QStandardItemModel> #include "stringlistmodel.h" #include <QTableView> int main(int argc, char**argv) { QApplication app(argc, argv); QFileSystemModel model; //文件系统模型,代表了本地文件系统中的文件和目录 model.setRootPath(QDir::currentPath()); //设置文件系统模型监视的目录 QTreeView tree; //树形视图 tree.setModel(&model); //为视图指定模型 //void QAbstractItemView::setRootIndex ( const QModelIndex & index ) //QModelIndex QFileSystemModel::index ( const QString & path, int column = 0 ) //根据指定目录获得模型项索引 tree.setRootIndex(model.index(QDir::currentPath())); //指定根索引 tree.show(); QListView list; //列表视图 list.setModel(&model); list.setRootIndex(model.index(QDir::currentPath())); list.show(); return app.exec(); }