QStandardItemModel,setData和setItem区别
背景:
model存储数据,用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法,手册中没有提及太多,于是记录备忘。
主要包括:
setRowCount,setColumnCount
setItem,setVerticalHeaderItem,setHorizontalHeaderItem
setData,setHeaderData
当然还有很多函数,不用逐一列举,本次记录的是我认为容易有歧义的,分为item类和data类。
model的容量:
model可以通过构造函数或setRowCount/setColumnCount函数,设置行数和列数,但仅仅是设置了“容量”,并没有item(数据实体)。
model的数据实体:
model的setItem,setVerticalHeaderItem,setHorizontalHeaderItem函数,如果需要,会自动“撑开”容量,一旦设置,就相当于有了数据实体,哪怕是空值。
item是个对象,里面可以有多个“字段/角色”来存储数据。其中text可以直接设置和读取,其它类型数据可以用ItemRole区分,随便使用,很灵活。
data函数:
model的setData,setHeaderData函数,“容量”允许时,可以创建并给item赋值,但不能自动“撑开”容量,所以依赖“容量”。如果“容量”不允许,执行失败返回false。
相比item,我想为什么setItem是void没有返回值,因为必然成功。而setdata需要bool返回值,因为不一定成功。
实践:
所以写了下面代码用于测试:
#include "mainwindow.h"
#include <QApplication>
#include <QStandardItemModel>int main(int argc, char *argv[])
{//1:QStandardItemModel *model1 = new QStandardItemModel;model1->setHorizontalHeaderItem(0, new QStandardItem("text1"));//setItem会自动创建“行/列”,此时item.text()="item1"int model1_iColCount = model1->columnCount();//= 1bool model1_bIsSetSuccessed = model1->setHeaderData(0, Qt::Horizontal, QVariant(10));//= trueQString model1_sHeaderData = model1->headerData(0, Qt::Horizontal).toString();//= "10"QString model1_sItemText = model1->horizontalHeaderItem(0)->text();//= "10",setData自动创建了item并赋了值,覆盖了“text1”//2:QStandardItemModel *model2 = new QStandardItemModel;//默认没有“行/列”bool model2_bIsSetSuccessed = model2->setHeaderData(0, Qt::Horizontal, QVariant(20));//= falseQString model2_sHeaderData = model2->headerData(0, Qt::Horizontal).toString();//= ""int model2_iColCount = model2->columnCount();//= 0//3:QStandardItemModel *model3 = new QStandardItemModel;model3->setColumnCount(1);//显式设置列数int model3_iColCount = model3->columnCount();//= 1bool model3_bIsSetSuccessed = model3->setHeaderData(0, Qt::Horizontal, QVariant(30));//= trueQString model3_sHeaderData = model3->headerData(0, Qt::Horizontal).toString();//= "30"QString model3_sItemText = model3->horizontalHeaderItem(0)->text();//= "30",setData自动创建了item并赋了值//4:QStandardItemModel *model4 = new QStandardItemModel(0, 1);//构造时设置“行/列”数int model4_iColCount = model4->columnCount();//= 1bool model4_bIsSetSuccessed = model4->setHeaderData(0, Qt::Horizontal, QVariant(40));//= trueQString model4_sHeaderData = model4->headerData(0, Qt::Horizontal).toString();//= "40"QString model4_sItemText = model4->horizontalHeaderItem(0)->text();//= "40",setData自动创建了item并赋了值return 0;
}
显然,setItem是自动的,随心所欲,setData是依赖model行和列的数量的,如果setData成功,会创建和更新相应的item,返回true。否则返回false,一切无效,但不报错。这也是特别要注意的。如果不小心使用了它,没有判断返回值,一旦出错,一时很难定位。
我的体会:
最好直接操作model和item,并充分理解对象树,所谓data类的操作,反正我觉得无所谓,目前还没发现哪种场景必须用它。
本文完。
相关文章:
QStandardItemModel,setData和setItem区别
背景: model存储数据,用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法,手册中没有提及太多,于是记录备忘。 主要包括: setRowCount,setColumnCount setItem&#x…...
应用出海新福祉,融云助IM社交迅速对齐海外用户体验
对于互联网业务而言,贴近年轻用户的创新是永恒的话题。近期,一种新的社交方式悄悄地在年轻人中流行开来,这就是“猫鼠游戏”。关注【融云全球互联网通信云】了解更多 玩法可以说是我们熟悉的“躲猫猫”游戏升级版,不同之处在于&a…...
64T存储松下mov和索尼mp4文件变0字节恢复案例
64T存储松下mov和索尼mp4文件变0字节恢复案例 小型入门的小NAS凭借超市的性价比在各行业中开始流行,可以通过搭配普通SATA硬盘就可以完成阵列上线,部署也很简单,一根网线就搞定。我们看一个影视公司64T小NAS存储比较奇怪的恢复案例。 故障存…...
【C/C++】 常量指针、指针常量、指向常量的常指针
const修饰指针的三种情况 int main() {int a 10;int b 10;//常量指针//const修饰的是int,指针指向可以改,指针指向的值不可以更改const int * p1 &a; p1 &b; //正确//*p1 100; 报错//指针常量//const修饰的是指针,指针的值&am…...
容斥原理,多步容斥
容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话,通常情况下我们的把限制视为两个方面,一方面是总限制,一方面是对于每个物品的限制,这样设集合 S i S_i Si表示满足总限制以及…...
vue(32) : win10创建vue2基础前端框架
vue2element-uiaxios 1.创建vue2项目 开发工具为HBuilderX 3.7.3 1.1.新建项目 1.2.普通项目-vue项目(2.6.10) 等待创建项目 2.安装element-ui组件 2.1右键左下角开始图标 2.2.cd进入项目目录,执行安装element-ui npm i element-ui -S 2.3.main.js引入配置 import {Paginat…...
如何制作一款资源网站app
简介 平时生活学习中我们会经常登录各种网站,比如看电影,看视频学习,找资料等等。有时想找到一个靠谱的网站,花了很长时间也找不到。我自己收集了很多好的网站,主要是找资源的,然后我做了一个导航app软件&…...
解决在Win7下运行一些老游戏花屏或色彩异常问题的方法
有一些喜欢回顾经典老游戏的玩家们,在目前最新的windows7的操作系统下,运行某些游戏会出现花屏,问题的原因是因为win7对这些游戏的DirectDraw不兼容,一种方法是改游戏配置文件,把游戏色彩8bit改成16bit,当然…...
使用vue3+vite+elctron构建小项目介绍Electron进程间通信
进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 …...
家政APP开发服务同城预约维修接单管理系统软件小程序
家政服务小程序是一个基于移动端的家政服务平台,为用户提供方便快捷的家政服务。以下是小程序的主要功能: 1. 家政服务内容展示:商家可以在小程序中展示各种家政服务项目,如清洁、保洁、保姆、月嫂、钟点工等。用户可以浏览服务信…...
NOIP2023模拟8联测29 C. 蛋糕
NOIP2023模拟8联测29 C. 蛋糕 文章目录 NOIP2023模拟8联测29 C. 蛋糕题目大意思路code 题目大意 你现在得到了一个二维蛋糕,它从左到右可以分成 n n n 列,每列高为 a i a_i ai 。对于每一列,又可以从下到上分为 a i a_i ai 块&#x…...
echarts的图表立体感——实现立体柱状图和立体饼图的详细教程
😂博主:小猫娃来啦 😂文章核心:使用echarts实现立体柱状图和立体饼图的详细教程 文章目录 简单介绍立体柱状图和立体饼图环境配置实现立体柱状图实现立体饼图总结 简单介绍立体柱状图和立体饼图 立体柱状图和立体饼图是数据可视化…...
解决VSCode使用SSH远程连接时无法指定用户名的问题
Windows 11自带OpenSSH客户端,和VSCode配合得很好,没有这个问题。 今天要说的是旧版本Windows 7/8/10系统遇到的问题。 PS: Windows 7可以运行的最后版本是VSCode 1.80.2 由于Windows 7/8/10没有自带的OpenSSH客户端,但可以调用MSYS环境下的…...
Vue Camera是什么,如何用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一、Vue Camera是什么? Vue Camera是一个基于Vue.js的相机组件库,…...
ORANGE室内高尔夫—韩国室内模拟高尔夫原装进口真实体验身临其境
ORANGE室内高尔夫—韩国室内模拟高尔夫 真实体验 身临其境 室内高尔夫的产品优势: 1. 实际高尔夫球场的限制:室内高尔夫可以弥补室外高尔夫球场数量有限的问题,使得更多人能够享受高尔夫运动。 2. 天气和季节的限制:室内高尔夫可…...
【观察】从口袋到云端全景式AI创新,联想“全栈智能”再升级
知名科技杂志《连线》创始主编凯文凯利曾预测:“在未来的 100 年里,人工智能将超越任何一种人工力量,将人类引领到一个前所未有的时代。” 确实如此,犹如历史上蒸汽机、电力、计算机和互联网等通用技术一样,近20年来&a…...
linux 实用命令搜集 —— 筑梦之路
1. xargs命令 # 找出 / 目录下以 .conf 结尾的文件,并进行文件分类find / -name *.conf -type f -print | xargs file# 找出文件并打包find / -name *.conf -type f -print | xargs tar cjf test.tar.gz 2. 查找内存使用量较高的进程 ps -aux | sort -rnk 4 | he…...
08-Docker-网络管理
Docker 在网络管理这块提供了多种的网络选择方式,他们分别是桥接网络、主机网络、覆盖网络、MACLAN 网络、无桥接网络、自定义网络。 1-无桥接网络(None Network) 当使用无桥接网络时,容器不会分配 IP 地址,也不会连…...
【VS Code】使用 VS Code 登陆远程服务器上的 Docker 容器
以下命令默认已经构建了一个 Docker Image。 # 在服务器上启动 docker (-p 端口映射,用于后续的 ssh 连接) docker run -itd -v /mnt/mount/:/home -p 8124:22 --name container-name --gpus all image-name# 进入容器中 docker exec -it container-name /bin/bas…...
用Python做数据分析之数据统计
接下来说说数据统计部分,这里主要介绍数据采样,标准差,协方差和相关系数的使用方法。 1、数据采样 Excel 的数据分析功能中提供了数据抽样的功能,如下图所示。Python 通过 sample 函数完成数据采样。 2、数据抽样 Sample 是进行…...
使用Node.js和Taotoken为网站后台添加自动内容审核
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Node.js和Taotoken为网站后台添加自动内容审核 为网站用户生成的内容(如评论、帖子)添加一层自动审核&…...
QKeyMapper终极指南:免费开源按键映射工具,5分钟让你的键盘鼠标手柄随心所欲
QKeyMapper终极指南:免费开源按键映射工具,5分钟让你的键盘鼠标手柄随心所欲 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支…...
UnrealPakViewer:深度剖析虚幻引擎资源包的5大可视化分析能力
UnrealPakViewer:深度剖析虚幻引擎资源包的5大可视化分析能力 【免费下载链接】UnrealPakViewer 查看 UE4 Pak 文件的图形化工具,支持 UE4 pak/ucas 文件 项目地址: https://gitcode.com/gh_mirrors/un/UnrealPakViewer UnrealPakViewer是一款专门…...
终极Windows进程内存操控指南:Xenos DLL注入器深度实战解析
终极Windows进程内存操控指南:Xenos DLL注入器深度实战解析 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 在Windows系统开发与安全研究领域,DLL注入技术一直是连接应用程序与系统底层的关键桥…...
以下是 MaxWell 工业上位机项目的最终完整补充
以下是 MaxWell 工业上位机项目的最终完整补充:1. Region 管理面板(Region Management Panel) 这是一个用于运行时监控和管理 Region 的调试/管理界面,适合工业项目开发和维护阶段使用。 RegionManagementView.xaml <!-- Views…...
基于群论的双曲空间统计建模:从莫比乌斯分布到高效算法
1. 项目概述:为什么我们需要双曲空间与群论?如果你处理过社交网络、知识图谱或者自然语言中的词汇关系,一定对“层次结构”这个词不陌生。想象一下,你要把整个维基百科的词条关系,或者一个公司的组织架构图,…...
Z变换与数字滤波器设计:从零极点分析到Python实战
1. 从理论到代码:Z变换如何成为数字信号处理的“瑞士军刀”如果你刚开始接触数字信号处理,可能会觉得Z变换是个有点抽象的数学工具。但在我十多年的音频算法和通信系统开发经历里,Z变换远不止是教科书上的公式——它是我们设计、分析和调试数…...
播客主必看的AI语音合成合规红线,版权/声纹/数据跨境三重雷区全解析,错过即违规
更多请点击: https://codechina.net 第一章:AI语音合成在播客制作中的应用 AI语音合成技术正深刻重塑播客内容的生产范式。借助高质量、低延迟、多风格可调的TTS(Text-to-Speech)引擎,创作者无需专业录音棚、配音演员…...
Windows设备管理器报‘代码43’导致HDMI无输出?保姆级排查与修复指南(附原理)
Windows设备管理器报‘代码43’导致HDMI无输出?保姆级排查与修复指南(附原理)当你正准备进行一场重要的演示,或是沉浸在游戏世界中时,突然发现外接显示器黑屏无信号,设备管理器显示"Windows已停止该设…...
超冷原子吸收成像的深度学习优化方法
1. 超冷原子吸收图像分析的技术挑战在超冷原子实验中,原子云的空间分布信息是理解量子态的关键指标。吸收成像技术通过测量原子云对共振激光的吸收情况,能够非破坏性地获取这一信息。典型的吸收成像过程需要采集三帧图像:包含原子的图像&…...
