(四十)模型视图中的委托

QTableView为例:Qt模型视图委托(MVD)(Model-View-Delegate) QT中的MVD(模型-视图-委托)模式是一种类似于MVC的设计模式,将数据、界面和交互逻辑分离。模型负责数据管理,视图负责显示界面,而委托则嵌入在视图中处理数据的显示和编辑。QT提供了多种视图组件(如QListView、QTreeView、QTableView)和模型类(如QStandardItemModel、QAbstractItemModel),支持数据的多样化呈现。委托(Delegate)通过定制显示和编辑行为增强了视图的灵活性。该模式适用于各类数据结构展示(列表、表格、树形),能够高效处理数据与界面 阅读详情

传统的MVC设计模式

模型负责组织数据

视图负责显示数据

控制器负责处理用户输入

 

Qt中模型视图设计模式

视图中继承了处理用户输入的功能                     

视图将用户输入作为内部独立的子功能而实现

 

 

模型视图中的委托

1、  抽象类QAbstractItemDelegate是委托类的基类

2、  Qt4.4版本后的标准委托是QStyledItemDelegate

3、  委托(Delegate)是视图中处理用户输入的部件

4、  视图可以设置委托对象用于处理用户输入

5、  委托对象负责创建和显示用户输入上下文(创建、显示编辑框)

6、  建议以QStyledItemDelegate为基类自定义委托

委托中的编辑器

1、  委托能够提供编辑时需要的上下文环境(编辑器)

2、  不同的委托提供的编辑器类型不同(文本框、单选框等等)

3、  编辑器从模型获取数据,并将编辑结果返回模型

 

交互流程

 

委托中的关键函数

virtual QWidget *

createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const

需要编辑数据是,创建编辑器组件

 

virtual void

updateEditorGeometry ( QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const

更新编辑器组件大小

 

virtual void

setEditorData ( QWidget * editor, const QModelIndex & index ) const

通过索引index 从模型中获取数据

 

virtual void

setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const

将编辑后的新数据返回模型

 

委托中的关键信号

void

closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint = NoHint )

编辑器组件关闭信号

 

void

commitData ( QWidget * editor )

新数据提交信号

 

 

//验证上述交互流程

 

//main.cpp

 

#include <QtGui/QApplication>
#include "Widget.h"
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   Widget w;
   w.show();
   
   return a.exec();
}



//SubStyledItemDelegate.h

 

#ifndef SUBSTYLEDITEMDELEGATE_H
#define SUBSTYLEDITEMDELEGATE_H
 
#include <QStyledItemDelegate>
 
class SubStyledItemDelegate : publicQStyledItemDelegate
{
   Q_OBJECT
protected slots:
   void onCloseEditor(QWidget* editor);    //关闭编辑器组件的信号的槽函数
   void onCommitData(QWidget* editor);  //数据提交信号的槽函数
public:      //下面的函数都由视图对象调用
   explicit SubStyledItemDelegate(QObject* parent = 0);
   QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem&option, const QModelIndex &index) const;
   void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem&option, const QModelIndex &index) const;
   void setEditorData(QWidget *editor, const QModelIndex &index) const;
   void setModelData(QWidget *editor, QAbstractItemModel *model, constQModelIndex &index) const;
};
 
#endif // SUBSTYLEDITEMDELEGATE_H


 

 

//SubStyledItemDelegate.cpp

 

#include"SubStyledItemDelegate.h"
#include <QDebug>
 
SubStyledItemDelegate::SubStyledItemDelegate(QObject*parent) :
   QStyledI
(四十一)视图中的委托 视图与委托 1、  委托是视图的一部分,需要承担数据显示的部分工作 2、  视图负责确定数据的显示方式(列表、表格、树形) 3、  委托负责具体数据项的显示和编辑(数据项值、编辑器) 4、  视图和委托共同完成数据显示功能和数据编辑功能   /* 1、在视图setItemDelegate()时,将参数设置为NULL,即取消视图的委托,运行时,仍能看出视图是以怎样的方式显示数据的(能分 阅读详情

相关推荐

C++23新特性深度解析:从核心语法到标准库的现代化升级

C++作为高性能系统编程的核心语言,其标准演进始终围绕零开销抽象和运行时效率两大原则展开。新版本的语言特性通常从语法糖、编译期计算和内存模型等基础层面进行优化,旨在提升开发效率与代码安全性。在工程实践中,这些改进直接转化为更简洁的API设计、更优的缓存利用率和更强的并发支持,尤其适用于游戏引擎、高频交易和科学计算等对性能有极致要求的场景。C++23引入的`std::flat_map`通过连续内存布局显著提升数据局部性,而`std::mdspan`则为多维数组操作提供了类型安全的抽象,两者共同解决了长期存在的

428

校招软件测试面经篇一(互联网企业)

  招银网络科技(9.27) 项目详细介绍,给一个场景,让你用自己的算法框架解决; 建立数据库到关闭数据库整个过程的代码(connection close); Java:jvm、hashmap和hashtable的比较、线程的建立几种方式; 数据库:数据库三范式、索引(什么时候用)、存储结构; C#:委托(简历的锅); 撕代码:ABC求所有子集(分数数列求和、最长01字串、青蛙跳台阶-...

qq_38270906的博客 7314

深入系列课程:Kotlin 数据类解构在 Android 中的应用

本文深入探讨Kotlin数据类解构中的componentN机制及其在Android开发中的应用。文章首先介绍数据类解构的核心概念与优势,详细解析componentN的自动生成原理和实现方式。通过UI状态管理等实战案例,展示其如何简化代码并提升效率,包括对非数据类的手动实现方案。同时指出常见误用场景及解决方案,并延伸讨论与委托属性的结合使用。最后提供面试问答集锦,帮助开发者全面掌握这一特性。全文系统性地讲解了componentN从基础到高级的完整知识体系,为提升Kotlin开发效率提供实用指导。

郑伟强dev的专栏 27

【信息科学与工程学】【安全领域】第一百四十一篇 SDN+安全服务链场景0001 算法01

编号类型领域子领域问题(要解决什么)问题的数学分析及数值分析及优化分析参数列表及参数的边界范围及极限及常量/数值/数字关联知识和法律法规A1(五元组→匹配树/TCAM映射)转发面 / 接入-边缘SC分流点(MCR/CR/BRAS)引流:按IP五元组+VLAN/QinQ+SRv6隧道信息区分租户/业务,决定送入哪个SRv6 TE Policy/BSID给定海量微流,如何把"租户T+业务B+(sa/da/SP/DP/proto)"快速映射为一条。

weixin_49199313的博客 598

Steve Newman 的 Hyperproductivity:一个 60 岁老头如何用反 tokenmaxxing 哲学驾驭 AI

它的作用只有一个:帮他在开始工作之前,把"应该看什么"和"不应该看什么"分开。不是推荐算法那种"猜你喜欢",而是他自己定义的过滤规则——什么东西根本不值得进他的注意力范围。它是"AI 帮我不做"。所以他的阅读工作流不是"摄取尽可能多的信息",而是"训练自己对"什么是有价值的问题"的直觉"。TDD(Test-Driven Development)用在"技能"上——每次他给 AI 一个新任务,他会先写一个"期望结果",然后让 AI 尝试,然后检查差距。他不是 AI 的"监督员",他是 AI 的。

步子哥的博客 55

【信息科学与工程学】【审计学】第一篇 招投标领域审计算法02

给定人、事、时、地、物等实体集合V和证据事实集合F, 构建一个概率图模型, 计算任意两个实体/事实之间存在关联关系的概率。:构建一个深度贝叶斯网络, 其中顶层为待推断的心理特征P, 中间层为可观测的行为模式B, 底层为多模态证据E。:基于现场痕迹、行为模式、通讯内容等证据E, 推断嫌疑人的心理特征向量P(如反社会性、冲动性、策划能力)。:对高风险的案件, 自动检索关联当事人、律师涉及的其他历史案件, 形成关联视图。:定义如“当事人-律师-当事人”、“当事人-多案件”等路径, 捕捉隐蔽关联。

weixin_49199313的博客 418

汇川AM402、H3U和上位机C#ModebusTcp通讯

目录一、测试任务二、测试环境三、PLC工程1、组态配置2、ip地址、端口号 3、全局变量定义四、C#端Winform程序创建1创建主界面 2、创建子窗口 3、运行生成,界面效果4、Modebus协议说明5、Modebus操作说明六、测试1、寄存器读测试 2、MW1300寄存器的BIT位3、写寄存器测试4、PLC断电或者断网 七、工程下载连接1、PLC作为ModebusTCP端,端口号都是502,PC端上位机软件作为TcpClient去连接多台PLC。PC端读写PLC寄存器。2、PC端在有的PLC断电、断网的

panjinliang066333的博客 2万+

自动配胶机的PLC控制系统设计

我们根据自动配胶机的控制需求,编写了相应的PLC程序。PID温度控制算法的实现方面,我们采用了经典的PID控制算法,通过不断调整加热器的功率,实现对胶水混合温度的精确控制。在PLC程序中,我们编写了PID控制算法的程序模块,通过实时采集温度传感器的数据,计算温度偏差和偏差变化率,并根据PID控制算法计算出加热器的功率输出值,实现对温度的精确控制。在系统调试阶段,我们对自动配胶机的各个部分进行了详细的测试和调试,包括气路和液路的开关测试、传感器的精度测试、步进电机的位置和速度测试以及PLC程序的逻辑测试等。

lagougongzuoshi的博客 1227

通达信强龙趋势幅图指标 - 精准捕捉趋势,把握强势行情,多角度分析个股,强弱一目了然

STICKLINE(趋势>0 AND SJTJ,4.8,5.8,1.5,0),COLORYELLOW;STICKLINE(资金>0 AND SJTJ,1.2,2.2,1.5,0),COLOR0080FF;STICKLINE(异动>0 AND SJTJ,0,1,1.5,0),COLORFF0080;STICKLINE(异动=0 AND SJTJ,0,1,1.5,1),COLORGRAY;

Q1809330692的博客 5632

【WSL】window11 安装WSL2配置conda环境及mlatom环境搭建

写这篇文章之前自己安装过两次环境,可能每次都会产生碰到同样的问题,为了搭建适合自己的虚拟环境保证每一步的正确性,按顺序记录一下。

wangxiancao的博客 1629

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 974

数据分片的三种方式:哈希、一致性哈希、按照数据范围分片

数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。三种常用的数据分片方式:1. 哈希分片2. 一致性哈希分片(Consistent Hash)3. 按照数据范围分片(Range Based)数据分片的应用场景:1. 数据库扩展2. 分布式缓存对集群部署多个缓存节点,提高缓存的处理能力。

wjianwei666的专栏 1135

YOLOv8改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块

许多证据表明层次化网络对图像恢复(IR)任务通常不太有效,因为IR的目标是逐个预测像素值(密集预测),而缩小特征图会丢失重要的像素级信息。然而,层次化结构有降低时间复杂度以及学习语义级和像素级特征表示的优点。为了弥补缺点并利用优点,设计了H - RAMi层。

Limiiiing的博客 378

CMOS 图像传感器——Skipping 和 Binning 模式

Skipping 和 Binning 模式

沧海一升的博客 6004

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: (三十九)自定义模型
下一篇: (四十一)视图中的委托
早起的虫儿灬
博客等级 码龄10年 54粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值