1、模型、视图、委托

  MVC包含模型(Model表示数据)、视图(View用户界面)、控制器(Controller界面对用户输入的反应方式)三部分,Qt中还引入了委托(Delegate,又称代理)来对用户输入进行灵活处理,使用它可以定制数据的渲染和编辑方式。

  《QT Creator快速入门》第十六章:模型/视图编程

  QAbstractItemModel是模型的抽象基类,其子类有:QAbstractListModel是列表模型抽象类、QAbstractTableModel是表格模型抽象类、QStringListModel是文本列表模型,QStandardItemModel是标准项模型,QFileSystemModel是文件系统模型,QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel用来访问数据库。

  QAbstractItemView是视图的抽象基类,QListView是列表视图类, QTableView是表格视图类,QTreeView是树型视图类,可以子类化它们来定制视图。

  QAbstractItemDelegate是委托的抽象基类,其子类有QStyledItemDelegate和QItemDelegate。

  下面是使用文件系统模型、列表视图、树形视图的例子:

《QT Creator快速入门》第十六章:模型/视图编程
#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();
}
View Code

相关文章: