1.MVC包含模型(Model表示数据)、视图(View用户界面)、控制器(Controller界面对用户输入的反应方式)三部分,Qt中还引入了委托(Delegate,又称代理)来对用户输入进行灵活处理,使用它可以定制数据的渲染和编辑方式。
QAbstractItemModel是模型的抽象基类
The QAbstractItemModel class provides the abstract interface for item model classes.
其子类有:QAbstractListModel是列表模型抽象类、QAbstractTableModel是表格模型抽象类、QStringListModel是文本列表模型,QStandardItemModel是标准项模型,QFileSystemModel是文件系统模型,QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel用来访问数据库
QAbstractItemView是视图的抽象基类,QListView是列表视图类, QTableView是表格视图类,QTreeView是树型视图类,可以子类化它们来定制视图。
QAbstractItemDelegate是委托的抽象基类,其子类有QStyledItemDelegate和QItemDelegate
模型视图使用示例
(查询本机文件系统)
#include <QApplication>
#include <QAbstractItemModel>//抽象模型基类
#include <QAbstractItemView>//视图
#include <QItemSelectionModel>//限选模型
#include <QDirModel>//目录模型
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QSplitter>
int main(int argc, char* argv[])
{
QApplication app(argc,argv);
//创建模型、
QDirModel model;
//创建树视图、列表视图、表格视图
QTreeView tree;
QListView list;
QTableView table;
tree.setModel(&model);
list.setModel(&model);
table.setModel(&model);
//设置视图对象的选择方式为多选,list/table选择方式同tree
tree.setSelectionMode(QAbstractItemView::MultiSelection);
list.setSelectionMode(tree.selectionMode());
table.setSelectionMode(tree.selectionMode());
//树视图双击信号发射后,列表以及表格视图刷新内容
QObject::connect(&tree, SIGNAL(doubleClicked(QModelIndex)),
&list, SLOT(setIndex(QModelIndex)));
QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),
&table,SLOT(setRootIndex(QModelIndex)));
QSplitter *splitter = new QSplitter;
splitter->addWidget(&tree);
splitter->addWidget(&list);
splitter->addWidget(&table);
splitter->setWindowTitle(QString("模型/视图"));
splitter->show();
return app.exec();
}
QDirModel Class
The QDirModel class provides a data model for the local filesystem.
QDirModel类为本地文件系统提供了一个数据模型
QSplitter Class
The QSplitter class implements a splitter widget. More...
QSplitter类实现了一个拆分器小部件
标准模型项示例
#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QDebug>
int main(int argc,char* argv[])
{
QApplication a(argc,argv);
//创建标准项模型
QStandardItemModel model;
//获取标准项模型的跟项,根项是不可见的
QStandardItem *parentItem = model.invisibleRootItem();
//创建标准项item0,设置文本,设置图标,工具提示
QStandardItem *item0 = new QStandardItem;
item0->setText(QString("A"));
QPixmap pixmap0(50, 50);
pixmap0.fill(Qt::red);
item0->setIcon(QIcon(pixmap0));
item0->setToolTip(QString("A的提示"));
//将item0作为父类的子项
parentItem->appendRow(item0);
parentItem=item0;
//创建item0的子项
QStandardItem *item1 = new QStandardItem;
item1->setText(QString("B"));
QPixmap pixmap1(50,50);
pixmap1.fill(Qt::blue);
item1->setIcon(pixmap1);
item1->setToolTip(QString("B项"));
parentItem->appendRow(item1);
QStandardItem *item2 = new QS