Qt模式视图

MVC

在这里插入图片描述
Qt的模型/视图结构分为三部分,模型(Model)、视图(View)、代理(Delegate)。
其中,模型与数据源通信,并为其他部件提供接口;而视图从模型中获得用来引用数据条目的模型索引(Model Index)。在视图中,代理负责绘制数据条目,当编辑条目时,代理和模型直接进行通信。
模型/视图/代理之间通过信号与槽进行通信。

关系
  • 数据发生改变时,模型发出信号通知视图
  • 用户对界面进行操作,视图发出信号
  • 代理发出信号告知模型/视图编辑器目前的状态

一、概述

1.1基本概念

1)模型

InterView框架中的所有模型都是基于抽象类QAbstractItemModel类。
在这里插入图片描述
在这里插入图片描述

2)视图

InterView框架中的所有模型都是基于抽象类QAbstractItemView类。
在这里插入图片描述

3)代理

InterView框架中的所有代理都是基于抽象类QAbstractItemDelegate类。
在这里插入图片描述

1.2案例

实现简单的目录文件浏览器
在这里插入图片描述
在这里插入图片描述

#include "mainwindow.h"
#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 a(argc, argv);
    QDirModel model;
    QTreeView tree;
    QListView list;
    QTableView table;
    tree.setModel(&model);
    list.setModel(&model);
    table.setModel(&model);
    tree.setSelectionMode(QAbstractItemView::MultiSelection);
    list.setSelectionModel(tree.selectionModel());
    table.setSelectionModel(tree.selectionModel());
    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list,SLOT(setRootIndex(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(QObject::tr("Model/View"));
    splitter->show();
    return a.exec();
}

二、模型(Model)

数据库首先将一些重复的文字字段用数值代码保存,然后通过外键关联操作来查找真实的含义。

2.1案例

实现将数值代码转换为文字的模型来介绍如何使用自定义模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值