QT模型视图结构2

文章目录

  • Qt 模型视图结构——模型类(二)
    • 1.基本概念
      • 1.1.模型的基本结构
      • 1.2.模型索引
      • 1.3.行号和列号
      • 1.4.父项
      • 1.5.项的角色

Qt 模型视图结构——模型类(二)

模型/视图结构是一种将数据存储界面展示分离的编程方法。模型存储数据,视图组件显示模型中的数据,在视图组件里修改的数据会被自动保存到模型里。模型的数据来源可以是内存中的字符串列表或二维表格型数据,也可以是数据库中的数据表,一种模型可以用不同的视图组件来显示数据,所以模型/视图结构是一种高效、灵活的编程结构。

1.基本概念

在模型/视图架构中,模型提供了一个标准接口,视图和委托使用该接口访问数据。在Qt中,标准接口由QAbstractItemModel类定义。无论数据项如何存储在任何底层数据结构中,QAbstractItemModel的所有子类都将数据表示为包含表项的层次结构。视图使用此约定访问模型中的数据项,但它们向用户呈现此信息的方式不受限制。模型还通过信号和插槽机制将任何有关数据更改的信息通知附加的视图。

1.1.模型的基本结构

有3种常见的展示形式,分别是列表模型( list model ),表格模型( table model )和树状模型( tree model )。不管模型的表现形式如何,模型中存储数据的基本单元都是项 (item),每个项有一个行号和一个列号,还有一个父项(parent item)。3个模型都有一个隐藏的根项(root item),列表模型的存储结构就是一列,表格模型的存储结构是规则的二维数组,树状模型的项可以有子项,结构更为复杂一些。
在这里插入图片描述

图 1 模型的3中展示形式

1.2.模型索引

为了确保数据的展示与数据的存储方式分离,模型中引入了模型索引(model index)的概念。通过模型能访问的每个项都有一个模型索引,视图组件和代理都通过模型索引来请求数据。这样只有模型需要知道怎样获取数据,被模型管理的数据可以广泛地被定义。模型索引提供访问数据的临时指针,用于通过模型提取或修改数据。

1.3.行号和列号

模型的基本形式是用行和列定义的表格数据,但这并不意味着底层的数据是用二维数组存储的,使用行和列只是为了组件之间交互方便。一个模型索引包含行号和列号。要获得一个模型索引,必须提供 3 个参数:行号、列号、父项的模型索引。例如,对于图 1中的表格模型中的 3 个项 A、B、C,获取其模型索引的示意代码如下:
QModelIndex indexA = model->index(0, 0, QModelIndex());
QModelIndex indexB = model->index(1, 1, QModelIndex());
QModelIndex indexC = model->index(2, 1, QModelIndex());

1.4.父项

对于列表模型和表格模型,每个项的父项都是顶层项,用QModelIndex()表示,而树状模型情况比较复杂,项一般称为节点。例如,对于图 1中的树状模型中的 3 个项 A、B、C,获取其模型索引的示意代码如下:

QModelIndex indexA = model->index(0, 0, QModelIndex());
QModelIndex indexB = model->index(1, 1, indexA );
QModelIndex indexC = model->index(2, 1, QModelIndex());

其中节点A和节点C的父节点是顶层节点,节点B的父节点是节点A。

1.5.项的角色

模型中的项能够有不同的角色,可以在不同的情况提供不同的数据。角色由枚举类Qt::ItemDataRole定义。

**表 1 枚举类Qt::ItemDataRole**常用的一些枚举值及其含义
枚举值角色数据类型含义
Qt::DisplayRole0QString界面上显示的字符串
Qt::DecorationRole1QIcon,QColor,QPixmap界面上装饰数据,如图标
Qt::EditRole2QString界面上编辑器中的数据
Qt::ToolTipRole3QString项的toolTip字符串
Qt::StatusTipRole4QString项的statusTip字符串
Qt::WhatsThisRole5QString'这是什么’模式下显示的数据
Qt::FontRole6QFont项的字体
Qt::TextAlignmentRole7Qt::Alignment项的对齐方式
Qt::BackgroundRole8QBrush项的背景色
Qt::ForegroundRole9QBrush项的前景色,如文字颜色
Qt::CheckStateRole10Qt::CheckState项的复选状态
Qt::AccessibleTextRole11QString扩展的可访问文本
Qt::AccessibleDescriptionRole12QString出于无障碍目的对项的描述
Qt::SizeHintRole13QSize提供给视图的项的大小提示
Qt::InitialSortOrderRole14Qt::SortOrder标题视图的初始排序顺序
Qt::UserRole0x0100QVanriant自定义的用户数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/140764.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【有啥问啥】自动提示词工程(Automatic Prompt Engineering, APE):深入解析与技术应用

自动提示词工程(Automatic Prompt Engineering, APE):深入解析与技术应用 引言 随着大语言模型(LLM)如 GPT、BERT 等的快速发展,如何高效地与这些模型进行互动成为了重要的研究方向之一。提示词&#xff…

神经网络通俗理解学习笔记(3)注意力神经网络

Tansformer 什么是注意力机制注意力的计算键值对注意力和多头注意力自注意力机制注意力池化及代码实现Transformer模型Transformer代码实现 什么是注意力机制 注意力机制的发展史 Attention Mechanism Mnih V, Heess N, Graves A. Recurrent models of visual attention, 2014…

JavaScript - 异步编程

1. 前言 在 JavaScript 中,异步编程是一种处理需要等待操作(如网络请求、文件读取或计时器)的编程方式。由于 JavaScript 是单线程的,意味着它一次只能执行一个任务。异步编程允许你在等待某些操作完成时,继续执行其他…

【技术调研】三维(4)-ThreeJs阴影投射、光线投射及案例

阴影投射 阴影是灯光经过物体后产生的,几个关键的设置: 灯光属性设置:.castShadow : Boolean 。此属性设置为 true 灯光将投射阴影。注意:这样做的代价比较高,需要通过调整让阴影看起来正确。 查看 DirectionalLight…

CAD_Electrical 2022使用记录

一、CAD软件实用调整 1、如何调节窗口背景颜色 例如:将图中白色的背景色调节为黑色。 步骤:在CAD空白区域点击右键 -> 点击选项 -> 在显示中点击颜色(窗口元素) -> 将二维模型空间统一背景的颜色修改成需要的颜色 2、如何调节关标大小 例如&a…

如何精确统计Pytorch模型推理时间

文章目录 0 背景1 精确统计方法2 手动synchronize和Event适用场景 0 背景 在分析模型性能时需要精确地统计出模型的推理时间,但仅仅通过在模型推理前后打时间戳然后相减得到的时间其实是Host侧向Device侧下发指令的时间。如下图所示,Host侧下发指令与De…

发展与监管协同发力 人工智能算法领域已形成良好生态

发展与监管协同发力 人工智能算法领域已形成良好生态 近日,全国组织机构统一社会信用代码数据服务中心对国家网信办公示的人工智能领域备案信息进行了详尽的分析,揭示了我国人工智能产业的蓬勃景象。据统计,我国人工智能领域的备案主体遍布各…

MySQL之表的约束

目录 前言 一:空属性 二:默认值 三:列描述 四:zerofill 五:主键 六:自增长 七:唯一键 八:外键 接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 前言 表中一定要有各种约束,通过约束…

零倾覆力矩点(ZMP)

系列文章目录 前言 在机器人学中,零倾力矩点(ZMP)是一个特征点,主要用于足式运动。在下文的一些假设中,我们将看到,它非正式地代表了一个系统接触反作用力的结果点。例如,下图中的刚体处于静态平…

【深入理解SpringCloud微服务】深入理解nacos配置中心(四)——配置新增或修改源码分析

【深入理解SpringCloud微服务】深入理解nacos配置中心(四)——配置新增或修改源码分析 原理回顾源码分析ConfigController#publishConfig()ConfigOperationService#publishConfig()nacos事件监听机制ConfigChangePublisher#notifyConfigChange()NotifyCe…

在 FlexSim 中使用 OpenUSD 分析、可视化和优化现实世界的流程

对于制造和工业企业而言,效率和精度至关重要。为了简化运营、降低成本和提高生产力,各公司正在转向数字孪生和离散事件模拟。 离散事件模拟使制造商能够通过试验不同的输入和行为来优化流程,这些输入和行为可以逐步进行建模和测试。 FlexSi…

6. Transforms的使用(一)--ToTensor()

Transforms的使用(一) 1.使用ToTensor类将数据转化为Tensor形式 导入需要使用的transforms类 from torchvision import transforms创建ToTensor类的实例 totensor transforms.ToTensor()将读取的图片ndarray数据转化为Tensor数据 img cv.imread(img_p…

Java网络编程 TCP通信(Socket 与 ServerSocket)

1.TCP通信原理 TCP通信涉及两个端点:客户端和服务器。服务器端使用 ServerSocket 监听特定端口,等待客户端的连接请求。客户端使用 Socket 连接到服务器的IP地址和端口。一旦连接建立,双方就可以通过输入输出流进行数据交换. ServerSocket是…

视频工具EasyDarwin生成RTMP给WVP拉流列表

效果 运行 登录 http://127.0.0.1:10086/ admin/admin 创建RTMP服务

微型导轨在光学仪器中的应用!

微型导轨在光学仪器中扮演着至关重要的角色,以其高精度、高稳定性的特点,提供稳定的光学路径和精确的光学元件位置。接下来,我们一起来看看微型导轨在光学仪器中的应用实例! 1、显微镜:在显微镜中,微型导轨…

鹏哥C语言自定义笔记重点(67-)

67. 68. 69. 70. 71.结构体内容 72.理解结构体的字节数 73. #pragma once //头文件中使用,功能是:防止头文件被多次引用 74.结构体传参 结论:结构体传参时,要传结构体地址。 75.位段 76.static是只能在该文件中看到,其他地方看不到 77.…

【6大设计原则】迪米特法则:解密软件设计中的“最少知识原则”

引言 在软件设计中,设计原则是指导我们构建高质量、可维护系统的基石。迪米特法则(Law of Demeter,LoD),也被称为“最少知识原则”,是六大设计原则之一。它强调对象之间的松耦合,确保系统的各个…

8. Transforms的使用(三)-- Resize

Transforms的使用(三) 1. 为什么要使用Resize 在模型的训练过程中往往需要图片数据的维度相同,才能适应深度学习模型中的相关神经网络结构,这时候就需要使用Resize保证所有的图片保持相同的尺寸2. 使用Resize调整图片的尺寸 在pytorch2.3的版本上,Resize()支持对Tensor类…

1405 问题 E: 世界杯

废话 这个题,我估计 22 22 22 年的时候写过一次,当时应该是搞明白了,现在重新写还是不会写,有点无奈 题目 问题 E: 世界杯:现在的 OJ 把题目加到一个活动里面去之后,感觉之后这个链接就访问不了了。题目…

CSS—4

1.定位 1.相对定位 2.绝对定位 3.固定定位 4.粘性定位 5.定位的特殊应用 2.布局-版心 3.布局-常用布局名词 4.布局-重置默认样式