模型/视图编程

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值