QStandardItem通过setCheckable添加复选框后无法再次通过setCheckable取消复选框的问题

前言

如题所示,通过setCheckable添加复选框后,想要通过setCheckable(false)取消复选框,你会发现根本没有作用的。

问题复现

#include "widget.h"
#include "ui_widget.h"
#include <QList>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_model = new QStandardItemModel(this);m_model->setHorizontalHeaderLabels(QStringList() << QStringLiteral("班级/名称") << QStringLiteral("性别") << QStringLiteral("学号"));QStandardItem *class_1 = new QStandardItem(QStringLiteral("班级1"));QStandardItem *st1_name = new QStandardItem(QStringLiteral("小明"));//这个item添加复选框st1_name->setCheckable(true);QStandardItem *st1_sex = new QStandardItem(QStringLiteral("男"));QStandardItem *st1_number = new QStandardItem(QStringLiteral("1"));QStandardItem *st2_name = new QStandardItem(QStringLiteral("老王"));st2_name->setCheckable(true);QStandardItem *st2_sex = new QStandardItem(QStringLiteral("男"));QStandardItem *st2_number = new QStandardItem(QStringLiteral("2"));class_1->appendRow(QList<QStandardItem*>() << st1_name << st1_sex << st1_number);class_1->appendRow(QList<QStandardItem*>() << st2_name << st2_sex << st2_number);QStandardItem *class_2 = new QStandardItem(QStringLiteral("班级2"));QStandardItem *st3_name = new QStandardItem(QStringLiteral("小翠"));st3_name->setCheckable(true);QStandardItem *st3_sex = new QStandardItem(QStringLiteral("女"));QStandardItem *st3_number = new QStandardItem(QStringLiteral("3"));QStandardItem *st4_name = new QStandardItem(QStringLiteral("小红"));st4_name->setCheckable(true);QStandardItem *st4_sex = new QStandardItem(QStringLiteral("女"));QStandardItem *st4_number = new QStandardItem(QStringLiteral("4"));class_2->appendRow(QList<QStandardItem*>() << st3_name << st3_sex << st3_number);class_2->appendRow(QList<QStandardItem*>() << st4_name << st4_sex << st4_number);m_model->appendRow(class_1);m_model->appendRow(class_2);ui->treeView->setModel(m_model);
}Widget::~Widget()
{delete ui;
}

效果如下
在这里插入图片描述

通过 setCheckable(false) 取消复选框的设置

void Widget::on_pushButton_clicked()
{QStandardItem *item = m_model->item(0, 0)->child(0, 0);qDebug() << item->text();item->setCheckable(false);
}
经过测试发现根本没有效果。

正确的姿势

void Widget::on_pushButton_clicked()
{QStandardItem *item = m_model->item(0, 0)->child(0, 0);qDebug() << item->text();item->setData(QVariant(), Qt::CheckStateRole);
}

通过源码我们可以看到 setCheckable(true)是进行了如下操作

/*!Sets whether the item is user-checkable. If \a checkable is true, theitem can be checked by the user; otherwise, the user cannot checkthe item.The item delegate will render a checkable item with a check box next to theitem's text.\sa isCheckable(), setCheckState(), setUserTristate(), setAutoTristate()
*/
void QStandardItem::setCheckable(bool checkable)
{Q_D(QStandardItem);if (checkable && !isCheckable()) {// make sure there's data for the checkstate roleif (!data(Qt::CheckStateRole).isValid())setData(Qt::Unchecked, Qt::CheckStateRole);}d->changeFlags(checkable, Qt::ItemIsUserCheckable);
}

可以看见实际上使用setCheckable(true)最后也是调用了setData(Qt::Unchecked, Qt::CheckStateRole)函数而已。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DockerCompose

DockerCompose Docker Compose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器&#xff01; 初识DockerCompose Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。格式如下&#xff1a; version: &…

Spring注解家族介绍: @RequestMapping

前言&#xff1a; 今天我们来介绍RequestMapping这个注解&#xff0c;这个注解的内容相对来讲比较少&#xff0c;篇幅会比较短。 目录 前言&#xff1a; RequestMapping 应用场景&#xff1a; 总结&#xff1a; RequestMapping RequestMapping 是一个用于映射 HTTP 请求…

Jprofiler的使用查看oom

一、安装 idea安装插件 安装客户端 链接 IDEA配置Jprofiler执行文件 二、产生oom import java.util.ArrayList; import java.util.List;//测试代码 public class TestHeap {public static void main(String[] args) {int num 0;List<Heap> list new ArrayList&l…

超详细!魔改为中文sqlmap的使用教程

超详细&#xff01;魔改为中文sqlmap的使用教程 1.SQLMAP介绍2.Qitian基础信息3.Qitian绕过WAF 魔改了一版中文版的SQLMAP&#xff0c;如下图&#xff1a; 1.SQLMAP介绍 Sqlmap是一个自动化的sql注入工具&#xff0c;其主要功能是扫描、发现并利用给定url的SQL注入漏洞&#…

【SpringMVC】JSR303与拦截器的使用

文章目录 一、JSR3031.1 JSR303是什么1.2 JSR 303的好处包括1.3 常用注解1.4 实例1.4.1 导入JSR303依赖1.4.2 规则配置1.4.3 编写校验方法1.4.4 编写前端 二、拦截器2.1 拦截器是什么2.2 拦截器与过滤器的区别2.3.应用场景2.4 快速入门2.5.拦截器链2.6 登录拦截权限案例2.6.1 L…

Docker搭建ELK日志采集服务及Kibana可视化图表展示

架构 ES docker network create elkmkdir -p /opt/ELK/es/datachmod 777 /opt/ELK/esdocker run -d --name elasticsearch --net elk -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -v /opt/ELK/es/plugins:/usr/share/elasticsearch/plugins -v /opt/…

蓝桥杯2023年第十四届省赛真题-更小的数--题解

目录 蓝桥杯2023年第十四届省赛真题-更小的数 题目描述 输入格式 输出格式 样例输入 样例输出 提示 【思路解析】 【代码实现】 蓝桥杯2023年第十四届省赛真题-更小的数 时间限制: 3s 内存限制: 320MB 提交: 895 解决: 303 题目描述 小蓝有一个长度均为 n 且仅由数字…

RK3588 点亮imx586摄像头

一.硬件原理图 mipi摄像头硬件确认点&#xff1a; 1.供电&#xff1a;5V&#xff0c;2.8V&#xff0c;1.2V&#xff0c;1.8V&#xff0c;reset脚&#xff08;硬拉3.3&#xff0c;上电的时候从低到高&#xff09;&#xff0c;pwron脚外接 3.3V。 2,时钟&#xff1a;MCLKOUT是2…

Linux 文件创建、查看

touch、cat、more命令 ①touch命令——创建文件 ②cat命令——查看文件内容全部显示 这是txt.txt文件内容 使用cat命令查看 ③more命令——查看文件内容支持翻页 在查看的过程中&#xff0c;通过空格翻页&#xff0c;通过q退出查看

基于Xml方式Bean的配置-初始化方法和销毁方法

SpringBean的配置详解 Bean的初始化和销毁方法配置 Bean在被实例化后&#xff0c;可以执行指定的初始化方法完成一些初始化的操作&#xff0c;Bean在销毁之前也可以执行指定的销毁方法完成一些操作&#xff0c;初始化方法名称和销毁方法名称通过 <bean id"userService…

linux万字图文学习进程信号

1. 信号概念 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。 1.1 linux中我们常用Ctrlc来杀死一个前台进程 1. Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。2. S…

微服务架构介绍

系统架构的演变 1、技术架构发展历史时间轴 ①单机垂直拆分&#xff1a;应用间进行了解耦&#xff0c;系统容错提高了&#xff0c;也解决了独立应用发布的问题&#xff0c;存在单机计算能力瓶颈。 ②集群化负载均衡可有效解决单机情况下并发量不足瓶颈。 ③服务改造架构 虽然系…

解决Springboot使用Junit测试时对数据库的修改无效

现象 在使用Junit做单元测试的过程中&#xff0c;比如对mybatis的dao进行单元测试&#xff0c;发现对数据库的select操作正常&#xff0c;可以获取数据&#xff0c;但insert、update、delete操作即使运行不报错&#xff0c;仍然不能不能对数据产生修改和插入。 原因和解决 原…

FreeSWITCH 1.10.10 简单图形化界面10 - 鼎兴FXO网关SIP注册公网IPPBX落地

FreeSWITCH 1.10.10 简单图形化界面10 - 鼎兴FXO网关SIP注册公网IPPBX落地 0、 界面预览1、创建一个话务台2、创建PBX SIP中继并设置呼入权限3、设置呼出规则4、设置分机呼出权限5、设置FXO 网关相关信息6、设置FXO网关端口组呼入号码7、设置FXO网关呼叫路由&#xff08;呼入及…

千兆以太网硬件设计及链路层 MAC 协议格式

以太网系列文章&#xff1a; &#xff08;1&#xff09;千兆以太网硬件设计及链路层 MAC 协议格式 &#xff08;2&#xff09;千兆以太网网络层 ARP 协议的原理与 FPGA 实现 &#xff08;3&#xff09;CRC校验代码原理 文章目录 前言一、以太网 MAC 层接口介绍1.MII 接口2.GMII…

进制转换问题

进制 二进制 &#xff08;Binary&#xff09;&#xff1a;0、1。简写为B 八进制&#xff08;Octonary&#xff09;&#xff1a;0、1、2、3、4、5、6、7。简写为O 十进制&#xff08;decimalism&#xff09;&#xff1a;0、1、2、3、4、5、6、7、8、9 简写为D 十六进制&#xff…

Nacos深入原理从源码层面讲解

文章目录 1 Nacos原理1.1 Nacos架构1.2 注册中心原理1.3 SpringCloud服务注册1.4 NacosServiceRegistry实现1.4.1 心跳机制1.4.2 注册原理1.4.3 总结 1.5 服务提供者地址查询1.6 Nacos服务地址动态感知原理 1 Nacos原理 1.1 Nacos架构 Provider APP&#xff1a;服务提供者Cons…

如何从第一性原则的原理分解数学问题

如何从第一性原则的原理分解数学问题 摘要&#xff1a;牛津大学入学考试题目展示了所有优秀数学家都使用的系统的第一原则推理&#xff0c;而GPT4仍然在这方面有困难 作者&#xff1a;Keith McNulty 我们中的许多人都熟悉直角三角形的边的规则。根据毕达哥拉斯定理&#xff0c;…

Kotlin File useLines nameWithoutExtension extension

Kotlin File useLines nameWithoutExtension extension import java.io.Filefun main(args: Array<String>) {val filePath "myfile.txt"val file File(filePath)println(file.name) //文件名字&#xff0c;不包括路径println(file.isFile) //是文件吗pri…

VBA技术资料MF57:VBA_自动创建PowerPoint演示文稿

【分享成果&#xff0c;随喜正能量】会因为有情绪而烦闷&#xff0c;也因为没控制情绪而懊悔。莫道幽人一事无&#xff0c;闲中尽有静工夫。情绪就像水&#xff0c;宜疏不宜堵。学会控制情绪&#xff0c;不能把情绪看得过重&#xff0c;也不能一味遏制情绪的产生。倾听所有声音…