Qt学习:项视图类

QT学习笔记-Qt Model/View 目录前言一、Qt模型视图结构简介二、Qt模型概念Model indexes行列父项**数据项角色**三、Qt视图概念使用已有视图使用模型操作被选项四、Qt委托使用已有委托一个简单的自定义委托五、创建模型设计模型 前言 因工作需要,要实现一个小型的数据管理系统。本着想捡起来QT技能的想法,学习下QT模型视图的操作。 一、Qt模型视图结构简介 模型/视图结构,仍然分离了数据与呈现给用户的方式,但提供了基于相同原理的简单框架。这种分离使得它可以在几个不同的视图中显示相同的数据,并且实现新类型的视图,而无需改变 阅读详情

        这节我们介绍Qt的model-view,我们主要依据的是 C++ GUI Programming with Qt4, 2nd Edition这本书。在介绍Qt的model-view之前,我们先重点讨论一下MVC框架。

        我们的系统有很多数据显示的需求,比如从数据库中把数据取出,然后以自己的方式显示在我们自己的应用程序的界面中。
        在早期的Qt版本中,要实现这个功能,我们需要定义一个widget,然后在这个widget中保存一个数据对象,比如是个list,然后我们对这个list进行查找、插入等的操作,或者把修改的地方写回这个list,然后刷新widget进行显示。这个思路很简单,也很清晰,但是对于大型程序,这种设计就显得苍白无力。比如,在一个大型系统中,你的数据可能很大,如果全部存入一个widget的数据对象中,效率会很低,并且这样的设计也很难在widgets之间共享变量,也就是说,如果你要几个组件共享一个数据对象,要么你就要用getter函数公开这个数据对象,要么你就必须把这个数据对象放进不同的组件分别进行维护。
        Smalltalk语言发明了一种崭新的实现,用来解决这个问题,这就是著名的MVC模型。对这个模型无需多言,简单来说,这是一个model-view-controller模型,即模型-视图-控制器。在MVC中,模型负责获取需要显示的数据,并且能够存储这些数据的修改。每种数据类型都有它自己对应的模型,但是这些模型提供一个相同的API,用于隐藏内部实现。视图用于将模型数据显示给用户。对于很大的数据,或许只显示一小部分,这样就能很好的提高性能。控制器是模型和视图之间的媒介,将用户的动作解析成对数据的操作,比如查找数据或者修改数据,然后转发给模型执行,最后再将模型中需要被显示的数据直接转发给视图进行显示。
        对于Qt而言,它使用的是一个类似于MVC模型的model-view架构。其中,model就相当于MVC架构中的model,而对于控制器部分,Qt使用的是另外的一种抽象,代理delegate。代理被用来提供对item渲染和编辑的控制。对于每种视图,Qt都提供了一个默认的代理,对于大多数应用来说,我们只需要使用这个默认的代理即可。这其中的类关系如下图所示(出自C++ GUI Programming with Qt 4, 2nd Edition) 

        使用Qt的model-view架构,我们可以让model是取回view所要展示的数据,这样就可以在不降低性能的情形下处理大量数据。并且你可以把一个model注册给多个view,让这些view能够显示同样的数据,也就是为同一个数据提供不同的显示方式。Qt会自动地对这些view保持同步,自动刷新所有的view以显示最新的数据。这样,我们就可以只对model进行修改,view会自动更新。
        在很多情况下,只需要把一小部分的项呈现给用户,这就没必要使用model这样重量级的组件。Qt为了方便起见也提供了一些方便的项视图类,分别是QListWidget,QTableWidget和QTreeWidget,使用这些类可以直接对item进行操作。这种实现很像Qt早期版本,组件中包含了相应的item,例如QTableWidget中包含有QTableWidgetItem等。但是对于很大的数据,我们则需要使用Qt的view类,比如QListView,QTabelView和QTreeView,同时需要提供一个model,可以是自定义model,也可以是Qt预置的model。例如,如果数据来自数据库,那么你可以使用QTabelView和QSqlTableModel这两个类。 
        接下来我们会慢慢介绍这些类和其使用方法。

 

【Qt】MVC设计模式 1.先创建一个model父类BaseModel,因为每个表都是有需要增删改查等等业务处理,如果每一个表都写一个处理类,那么类就很多,创建就不方便,所以用父类来统一类型,这个类必。有一个表就可以有一个这样的操作类,例如:UserModel对应用户表操作,VideoMode对应视频表操作.....3.UserModel子类要去实现父类虚函数或纯虚函数,即继承的多态中对父类成员函数重写,重写函数就为具体的某个业务操作,例如:登录业务、注册业务、分页显示业务....一个表(或视图)就有一个数据类。 阅读详情

相关推荐

Qt的MVC模型/视图编程(一)——理论知识

MVC(Model-View-Controller)是一种起源于Smalltalk的设计模式,经常用于建用户界面。

liqingjielihanjie的博客 1549

Qt高级编程之MVC框架

周末在图书馆不经意间翻阅了《Qt高级编程》后就爱释手,作者Mark Summerfield高瞻远瞩、思路清晰,刚好满足我提升Qt知识的需要,于是借出此书,好好学习一番。QT4.0版本引用了模型/视图架构,此框架实现了数据与表现层的分离,从而使同一个程序可以使用不同的表现形式。MVC拆分来讲,M是指业务模型(Model),V是指用户界面(View),C则是指控制器(Control),在应用中实际使用委托(Delegate)。耦合性低。

weixin_38880029的博客 8226

QT5中的QGraphics图形视图框架学习笔记(Item、Scene和View)

Qt图形视图框架提供了一套完整的图形处理工具,主要由三元素构成:QGraphicsView(视图)、QGraphicsScene(场景)和QGraphicsItem(图形项)。视图负责渲染场景内容并处理用户交互,场景管理图形项的布局和事件分发,图形项则是场景中的可视化对象。该框架支持缩放、旋转、平移等操作,通过坐标系转换函数实现不同层级间的映射,并允许自定义交互行为,如橡皮筋选择和拖拽模式。开发者可以高效地创建复杂的交互式图形应用,处理大量图形元素的显示与操作。

菜一头包的博客 3064

四十六、QT应用开发之MVC架构(附案例)

一、基本思想   开发 Qt 应用程序的一个基本原则就是:UI界面和业务逻辑需要尽可能的分离。   判断一个结构的解耦程度,一个简单的办法是离开了UI界面,业务逻辑是否可以正常调用和运行,如果可以,说明这个架构是比较成功的。同时,对UI界面和业务逻辑功能的每个模块,是否能够被替换,而不影响整个项目的功能,这点也是判断架构解耦性的一个指标。 二、设计思路 UI界面层(view)——>控制器层...

panchang199266的博客 2万+

【QT开发】项选择模型QItemSelectionModel类详解及实战应用

QItemSelectionModel是Qt提供的一个功能强大且灵活的项选择模型类,通过本篇文章的学习,你应该对QItemSelectionModel有了全面的理解,能够在自己的项目中正确使用它。QItemSelectionModel在用户界面中帮助你更好地管理和操作用户选定项,实现交互式和响应式的应用程序,有助于创建用户友好和高效的多选列表、表格数据选择等应用场景。

科技改变人类,技术成就未来 1946

5分钟搞定!用ZLMediaKit+GB28181搭建低成本外网视频监控(含避坑指南)

本文详细介绍了如何利用开源ZLMediaKit流媒体服务器与国标GB28181协议,快速搭建低成本、可外网访问的企业级视频监控系统。文章提供了从服务端部署、设备配置到外网访问优化的完整实战指南,并重点分享了网络配置、性能调优及常见问题的避坑方案,帮助用户实现高清视频流的稳定推送与多格式播放。

bush的博客 332

Qt学习:项视图类之自定义委托

我们用好几节内容介绍了Qt的MVC架构中的模型和视图类,至今,我们依然没有提到我们提到的代理的功能,下面我们再回顾一下Qt的项视图类架构。     我们知道,在经典的 MVC 模型中,view用于向用户展示 model 的数据。但是,Qt提供的不是 MVC 三层架构,而是一个 model/view 设计。这种设计并没有包含一个完整而独立的组件用于管理用户的交互。一般来说,view仅仅是用作对

bcs_01的专栏 3364

AMD MI355X与NVIDIA B200在GLM5.2大模型推理性能与成本对比分析

在 AI 推理硬件选型中,成本与性能的平衡一直是技术决策的核心难点。AMD 最新发布的 CDNA 4 架构 MI355X 加速卡与 NVIDIA Blackwell 架构的 B200 在 GLM5.2 这类千亿参数大模型上的表现,直接关系到企业部署私有化模型或提供推理服务的经济性。实际测试数据显示,在 32 tok/s/user 的交互性设定下,单张 MI355X 能够达到 1369 tok/s 的吞吐量,虽然略低于 B200 的 1756 tok/s,但每百万 token 成本仅为 0.30 美元,比 B

weixin_28221501的博客 295

Qt学习:项视图类之QTableWidget

控件设置选项         在TableWidget控件的properties选项中,一般常对以下选项进行设置。                 name:该控件对应源代码中的名称;                  font:设置表格内部的字体;                 columnCount:保存列的数目;                 rowCount:保存行的

bcs_01的专栏 5487

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

从原理图到PCB:手把手教你绘制DRV8301驱动板(附完整代码与避坑指南)

本文详细介绍了如何从原理图设计到PCB布局,手把手教你绘制DRV8301驱动板,特别适用于FOC(磁场定向控制)系统开发。内容涵盖元器件选型、电源树架构设计、栅极驱动电路、PCB布局技巧、焊接调试及代码配置,并附有完整代码与常见问题避坑指南,帮助工程师快速掌握DRV8301驱动板的设计与优化。

weixin_33716941的博客 395

Qt学习:项视图类之QListWidget

类QListWidget在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项。列表中的每个数据项被表示为类QListWidgetItem的一个对象。在列表视图中所要显示的数据被存放在每个数据项的角色DisplayRole对应的数据子项中。这个数据子项的类型为QVariant,其中可以存放类型为QString的字符串,也可以存放类型为int或者double的数值。我们可以调用QList

bcs_01的专栏 8232

【天气雷达】双偏振产品-差分反射率ZDR详解

双偏振产品-差分反射率ZDR详解。

珞瑜的博客 5408

Qt学习:项视图类之QSortFilterProxyModel和QListWidget

QSortFilterProxyModel是一个方便我们对模型操作(排序)的类,它是这样工作的:QSortFilterProxyModel封装一个已经存在的模型,我们可以把这个模型叫做源模型,即源模型为QSortFilterProxyModel提供数据,QSortFilterProxyModel利用视图类来观察源模型的数据并提供对源模型的数据的操作。其实就如这个类的名字说的那样,它只是一个“代理”

bcs_01的专栏 2984

华为OD机试真题 2026-9-2【查找幸运数】

华为OD机试真题 新系统【查找幸运数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【查找幸运数】多语言题解。

qq_45776114的博客 499

基于STM32设计的计算器(实现基本运算)

当前文章介绍的是STM32+LCD触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。LCD屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,MCU采用STM32F103ZET6。

8817

Qt学习:项视图类之QStringListModel和QListView

QListView是不显示表头和表框的,如果要显示,可以使用QTreeView来     view的显示属性分为列表list显示和icon图标显示,使用     QListView::setViewMode()来设置,默认为list型的     QListView::setModel ()用来设置view所关联的model     获取view中当前的位置,QListView::cur

bcs_01的专栏 6930

TOGAF架构内容—TOGAF 内容框架和企业元模型

TOGAF架构内容—TOGAF 内容框架和企业元模型

深圳市多克创新科技有限公司 1664

Qt学习:项视图类之QDirModel和QTreeView

QDirModel类封装了计算机的文件系统并且可以显示(或者隐藏)不同的文件属性。可以为这个模型应用过滤器,这样就可以根据自己的需要显示不同类型的文件系统条目,并且用不同的方式对这些条目进行排序。           我们先从构造函数开始: DirectoryViewer::DirectoryViewer(QWidget *parent) : QDialog(

bcs_01的专栏 8398

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Qt学习:项视图类之自定义模型

我们先前介绍了三种Qt的预定义模型,分别是QStringListModel,QDirModel(QFileSystemModel), QSortFilterProxyMoel,这些预定义模型为数据的处理和查看提供了很好的方法。但是,有些数据源不能有效的和预定义模型一起工作,因为我们大批量数据的存储是各种各样的,这时候用我们上边提到的三种预定义模型可能能解决问题,但却同时带来了效率和处理上的不便,因

bcs_01的专栏 3072

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

QT学习之图形视图

简述 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们。但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动、检测它们的碰撞和叠加;或者我们想让自己绘制的图形可以拖动位置、进行缩放和旋转等操作。实现这些功能,要是还使用以前的方法,那么会十分困难。解决这些问题,可以使用Qt提供的图形视图框架。 参考 http://www.qter.org/portal.php?mod=vi...

楼上小宇_home 5701

C++QT开发——GraphicsView(图形视图)

C++QT开发——GraphicsView(图形视图)

m0_60259116的博客 1万+

Qt-模型/视图结构

QAbstractItemModel是所有模型类的直接或间接父类,它定义了模型的通用接口函数,同时它也是抽象类,不能直接创建对象实例,各个具体的模型类实现了这些接口函数,以下是常用的接口函数1.行数和列数rowCount()返回行数,columnCount()返回列数,函数原型如下。

zhj18679130613的博客 1701
上一篇: 第十学 linux内核——内存寻址——分页机制(2)
下一篇: Qt学习:项视图类之QListWidget
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值