Qt 模型视图编程的简单实例

导言:
当遇到一个相对复杂的项目软件的时候,处理的数据量相对较大,这时候从软件设计的角度,一般都会考虑运用模型视图的架构。

Qt关于MVC编程组成部分:

大体上,模型、视图架构中众多类可以分为3组:模型、视图和委托。它们之间使用信号和槽来实现通信。

1 模型

所有的模型都基于QAbstractItemModel为数据提供了一个十分灵活的接口来处理各种视图,这些视图可以将数据表现为表格(table)、列表(list)和树(tree)等形式。

QAbstractListModel 和QAbstractTableModel类,提供了一些常见的功能。

Qt提供了一些现成的模型来处理数据项:

QStringListModel 用来存储简单的QString项目列表;

QStandardItemModel管理复杂的树形结构数据项,每一个数据项可以包含任意的数据;

QFileSystemModel提供了本地文件系统和目录的信息;

QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel用来访问数据库。

如果Qt提供的这些标准的模型无法满足需要,还可以子类QAbstractItemModel、QAbstractListModel 或者QAbstractTableModel来创建自定义的模型。

2 视图

Qt 提供了几种不同类型的视图,

  • QListView将数据项显示为一个列表;

    QTableView将模型中的数据显示在一个表格中;

    QTreeView将模型的数据项显示在 具有层次的列表中。

以上这些类都是基于QAbstractItemView抽象基类的。

3委托

默认的委托实现由QStyledItemDelegate类提供。

一个简单的例子:使用树形和列表两种视图来显示同一个模型的数据

#include <QApplication>
#include <QFileSystemModel>
#include <QTreeView>
#include <QListView>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // 创建文件系统模型
    QFileSystemModel model;
    // 指定要监视的目录
    model.setRootPath(QDir::currentPath());

    // 创建树型视图
    QTreeView tree;
    // 为视图指定模型
    tree.setModel(&model);
    // 指定根索引
    tree.setRootIndex(model.index(QDir::currentPath()));

    // 创建列表视图
    QListView list;
    list.setModel(&model);
    list.setRootIndex(model.index(QDir::currentPath()));

    tree.show();
    list.show();

    return app.exec();
}


输出:

在这里插入图片描述

ps:
有关编程的学习,编程的理论框架必须要建立起来,同时需要一定量的实例,这样才能融会贯通。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值