简介

MVC设计模式包括三个元素:表示数据的模型(Model)、表示用户界面的视图(View)和定义了用户在界面上操作的控制器(Controller)。
与MVC架构相似,QT为了方便程序的开发,引入了模型/视图结构用于完成数据与界面的分离,也就是常用的InterView框架。与传统的MVC模式不同的是,InterView框架把视图和控制器部件结合在一起,使得框架更为简洁。为了灵活地处理用户输入,InterView引入了代理(delegate)。通过使用代理,能够自定义数据条目的显示和编辑方式。

MVD

QT的模型/视图结构分为三部分:

  • 模型:与数据源通信,并为其他部件提供接口
  • 视图:视图从模型中获得用来引用数据条目的模型索引
  • 代理:当编辑条目时,代理和模型直接进行通信。

三者之间均通过信号和槽机制进行通信,他们的关系如下:

  • 数据发生改变时,模型发出信号通知视图,视图开始渲染(rendering)
  • 用户对界面进行操作,视图发出信号
  • 代理发出信号告知模型和视图编辑器目前的状态

典型代码

#include "dialog.h"
#include <QApplication>
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>
#include <QDirModel>
#include <QTreeView>
#include <QTableView>
#include <QListView>
#include <QSplitter>int main(int argc, char *argv[])
{QApplication a(argc, argv);//MVD使用示例QDirModel model;//文件目录modelQTreeView tree;QTableView table;QListView list;tree.setModel(&model);table.setModel(&model);list.setModel(&model);//设置模型tree.setSelectionMode(QAbstractItemView::MultiSelection);table.setSelectionModel(tree.selectionModel());//使用与tree对象相同的选择模型list.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("DirModel");splitter->show();return a.exec();
}

QT:MVC模式-MVD的使用DEMO相关推荐

  1. 实现MVC模式的Web应用程序

    实验结果 1.添加Thymeleaf依赖 <dependency><groupId>org.springframework.boot</groupId><ar ...

  2. ExtJS学习:MVC模式案例(三)

    在ExtJS案例系列教程的前两讲,我们了解了该案例的最终实现效果,并且在ExtJS学习:MVC模式案例(二)中我们添加Viewport.js和demoController.js两个文件,实现了对整个网 ...

  3. [ASP.NET MVC 小牛之路]01 - 理解MVC模式

    特别提醒:本文编写时间是 2013 年,请根据目前 .NET 发展接收你所需的知识点. PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得 ...

  4. JSP的MVC模式(JavaBean、Servlet、JSP)

    JSP的MVC模式中,Model=JavaBean,View=JSP,Controller=Servlet. 简而言之:JavaBean用于存储数据,JSP用于显示页面,Servlet用于处理数据(脏 ...

  5. Android Mvc 模式

    1.Mvc 介绍 Model-View-Controller(模型-视图-控制器) 模式,这种模式用于应用程序的分层开发.    model:模型层主要是处理数据的,主要进行网络请求,复杂的数据操作 ...

  6. Laya Air游戏开发模式之MVC模式(核心篇)

    上次结尾有说到Laya引擎在3D方面是借助Unity3d引擎的编辑器做好通过插件导出数据来做这没什么可挑剔(Unity引擎牛逼),但在2d编辑器(自身的)方面却存在很多bug(作者深有体会),所以这篇 ...

  7. HTML5开发中使用MVC模式

    公司上周举办了一次编程马拉松,时间为两天,我当然用了lufylegend.js,为了让代码看起来更整洁一些,尝试着用javascript写了一个小的MVC框架,并开发了一个简单的demo,由于时间太短 ...

  8. Qt Model/View(MVD)模型分析

           最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道M ...

  9. 【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表

    提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表.今天我们来一起了解一下什么是报表,报表的结构.构成元素,以及为什么需要报表. 什么是报表 简单的说:报表就是通过表格.图 ...

最新文章

  1. VC嵌入断点中断INT3
  2. 生成多个互不重叠的不同半径圆
  3. python docker自动化_自动化 – 自动创建docker容器并启动python脚本
  4. Java扑克牌(洗牌Collections.shuffle)
  5. 应用服务器与数据库之间是长连接,要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?...
  6. vba mysql update多字段_vba操作Mysql使用UPDATE一次更新多组数据
  7. 史上最全java架构师技能图谱(下)
  8. Php jsondb,JsonDB-PHP
  9. linux文件测试操作
  10. Java中的I/O流全汇总,所有的I/O就一张图
  11. Django REST framework+Vue 打造生鲜超市(九)
  12. jmeter定时器的使用_Jmeter的九种定时器解析
  13. Verilog 7人投票表决器
  14. 2022年瑞典经济发展研究报告
  15. 一图读懂IP数据包头结构
  16. SQL Server 2008 R2 企业版/开发版/标准版
  17. 模拟算法考试训练题和答案1
  18. Java实现若干个数计算平均值并保留小数位 java计算平均值 java四舍五入保留小数
  19. 计算机开机扫描磁盘,电脑开机扫描磁盘的方法
  20. 白杨SEO:SEO转型难吗?SEO如何转型ASO(应用商店搜索优化)?

热门文章

  1. MacOS安装mod_python
  2. CPU相关的18个概念
  3. 重新开张,谢天谢地。
  4. 每日新闻 丨新突破:AI能提前十年预测心脏病,准确率高达90%
  5. 爱思服务器shsh文件类型,使用爱思助手备份/上传SHSH
  6. 输入一个十进制数据,转换为8进制,使用顺序栈实现.
  7. 《LoadRunner 12七天速成宝典》—第2章2.2节解决乱码
  8. 索引提高sql查询效率速成宝典
  9. 用starUML画的软工课设:外卖点餐管理系统
  10. 禁止公司内网电脑安装QQ电脑管家和360安全卫士