当前位置: 首页 > news >正文

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区别

背景&#xff1a; model存储数据&#xff0c;用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法&#xff0c;手册中没有提及太多&#xff0c;于是记录备忘。 主要包括&#xff1a; setRowCount&#xff0c;setColumnCount setItem&#x…...

应用出海新福祉,融云助IM社交迅速对齐海外用户体验

对于互联网业务而言&#xff0c;贴近年轻用户的创新是永恒的话题。近期&#xff0c;一种新的社交方式悄悄地在年轻人中流行开来&#xff0c;这就是“猫鼠游戏”。关注【融云全球互联网通信云】了解更多 玩法可以说是我们熟悉的“躲猫猫”游戏升级版&#xff0c;不同之处在于&a…...

64T存储松下mov和索尼mp4文件变0字节恢复案例

64T存储松下mov和索尼mp4文件变0字节恢复案例 小型入门的小NAS凭借超市的性价比在各行业中开始流行&#xff0c;可以通过搭配普通SATA硬盘就可以完成阵列上线&#xff0c;部署也很简单&#xff0c;一根网线就搞定。我们看一个影视公司64T小NAS存储比较奇怪的恢复案例。 故障存…...

【C/C++】 常量指针、指针常量、指向常量的常指针

const修饰指针的三种情况 int main() {int a 10;int b 10;//常量指针//const修饰的是int&#xff0c;指针指向可以改&#xff0c;指针指向的值不可以更改const int * p1 &a; p1 &b; //正确//*p1 100; 报错//指针常量//const修饰的是指针&#xff0c;指针的值&am…...

容斥原理,多步容斥

容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话&#xff0c;通常情况下我们的把限制视为两个方面&#xff0c;一方面是总限制&#xff0c;一方面是对于每个物品的限制&#xff0c;这样设集合 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

简介 平时生活学习中我们会经常登录各种网站&#xff0c;比如看电影&#xff0c;看视频学习&#xff0c;找资料等等。有时想找到一个靠谱的网站&#xff0c;花了很长时间也找不到。我自己收集了很多好的网站&#xff0c;主要是找资源的&#xff0c;然后我做了一个导航app软件&…...

解决在Win7下运行一些老游戏花屏或色彩异常问题的方法

有一些喜欢回顾经典老游戏的玩家们&#xff0c;在目前最新的windows7的操作系统下&#xff0c;运行某些游戏会出现花屏&#xff0c;问题的原因是因为win7对这些游戏的DirectDraw不兼容&#xff0c;一种方法是改游戏配置文件&#xff0c;把游戏色彩8bit改成16bit&#xff0c;当然…...

使用vue3+vite+elctron构建小项目介绍Electron进程间通信

进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责&#xff0c;因此 IPC 是执行许多常见任务的唯一方法&#xff0c;例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 …...

家政APP开发服务同城预约维修接单管理系统软件小程序

家政服务小程序是一个基于移动端的家政服务平台&#xff0c;为用户提供方便快捷的家政服务。以下是小程序的主要功能&#xff1a; 1. 家政服务内容展示&#xff1a;商家可以在小程序中展示各种家政服务项目&#xff0c;如清洁、保洁、保姆、月嫂、钟点工等。用户可以浏览服务信…...

NOIP2023模拟8联测29 C. 蛋糕

NOIP2023模拟8联测29 C. 蛋糕 文章目录 NOIP2023模拟8联测29 C. 蛋糕题目大意思路code 题目大意 你现在得到了一个二维蛋糕&#xff0c;它从左到右可以分成 n n n 列&#xff0c;每列高为 a i a_i ai​ 。对于每一列&#xff0c;又可以从下到上分为 a i a_i ai​ 块&#x…...

echarts的图表立体感——实现立体柱状图和立体饼图的详细教程

&#x1f602;博主&#xff1a;小猫娃来啦 &#x1f602;文章核心&#xff1a;使用echarts实现立体柱状图和立体饼图的详细教程 文章目录 简单介绍立体柱状图和立体饼图环境配置实现立体柱状图实现立体饼图总结 简单介绍立体柱状图和立体饼图 立体柱状图和立体饼图是数据可视化…...

解决VSCode使用SSH远程连接时无法指定用户名的问题

Windows 11自带OpenSSH客户端&#xff0c;和VSCode配合得很好&#xff0c;没有这个问题。 今天要说的是旧版本Windows 7/8/10系统遇到的问题。 PS: Windows 7可以运行的最后版本是VSCode 1.80.2 由于Windows 7/8/10没有自带的OpenSSH客户端&#xff0c;但可以调用MSYS环境下的…...

Vue Camera是什么,如何用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一、Vue Camera是什么&#xff1f; Vue Camera是一个基于Vue.js的相机组件库&#xff0c;…...

ORANGE室内高尔夫—韩国室内模拟高尔夫原装进口真实体验身临其境

ORANGE室内高尔夫—韩国室内模拟高尔夫 真实体验 身临其境 室内高尔夫的产品优势&#xff1a; 1. 实际高尔夫球场的限制&#xff1a;室内高尔夫可以弥补室外高尔夫球场数量有限的问题&#xff0c;使得更多人能够享受高尔夫运动。 2. 天气和季节的限制&#xff1a;室内高尔夫可…...

【观察】从口袋到云端全景式AI创新,联想“全栈智能”再升级

知名科技杂志《连线》创始主编凯文凯利曾预测&#xff1a;“在未来的 100 年里&#xff0c;人工智能将超越任何一种人工力量&#xff0c;将人类引领到一个前所未有的时代。” 确实如此&#xff0c;犹如历史上蒸汽机、电力、计算机和互联网等通用技术一样&#xff0c;近20年来&a…...

linux 实用命令搜集 —— 筑梦之路

1. xargs命令 # 找出 / 目录下以 .conf 结尾的文件&#xff0c;并进行文件分类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 在网络管理这块提供了多种的网络选择方式&#xff0c;他们分别是桥接网络、主机网络、覆盖网络、MACLAN 网络、无桥接网络、自定义网络。 1-无桥接网络&#xff08;None Network&#xff09; 当使用无桥接网络时&#xff0c;容器不会分配 IP 地址&#xff0c;也不会连…...

【VS Code】使用 VS Code 登陆远程服务器上的 Docker 容器

以下命令默认已经构建了一个 Docker Image。 # 在服务器上启动 docker (-p 端口映射&#xff0c;用于后续的 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做数据分析之数据统计

接下来说说数据统计部分&#xff0c;这里主要介绍数据采样&#xff0c;标准差&#xff0c;协方差和相关系数的使用方法。 1、数据采样 Excel 的数据分析功能中提供了数据抽样的功能&#xff0c;如下图所示。Python 通过 sample 函数完成数据采样。 2、数据抽样 Sample 是进行…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...