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

树形结构的窗口小部件

这段代码是一个使用Qt框架的C++程序,实现了一个树形结构的窗口小部件(TreeWidget)。以下是主要的解释:

#include "treewidget.h"
#include "ui_treewidget.h"TreeWidget::TreeWidget(QWidget *parent) : QWidget(parent), ui(new Ui::TreeWidget)
{ui->setupUi(this);initTree();
}TreeWidget::~TreeWidget()
{delete ui;
}template<typename T>
QTreeWidgetItem* TreeWidget::addChild(T parent, const QString& text)
{auto item = new QTreeWidgetItem(parent, QStringList(text));item->setCheckState(0, Qt::Unchecked);return item;
}void TreeWidget::initTree()
{auto item = addChild(ui->tree, "top");QList<QTreeWidgetItem*> listChild;for(int nIndex = 1; nIndex <= 5; ++nIndex){auto pItem = addChild(item, QString("child%1").arg(nIndex));listChild.append(pItem);}for(const auto& child : listChild){for(int nRet = 1; nRet <= 5; ++nRet){addChild(child, QString("grandchild%1").arg(nRet));}}ui->tree->expandAll();
}void TreeWidget::updateParentItemStatus(QTreeWidgetItem* item)
{auto parent = item->parent();if (Q_NULLPTR == parent){return;}parent->setCheckState(0, item->checkState(0));int nCount = parent->childCount();for (int nIndex = 0; nIndex < nCount; ++nIndex){auto child = parent->child(nIndex);if (child->checkState(0) != parent->checkState(0)){parent->setCheckState(0, Qt::PartiallyChecked);break;}}updateParentItemStatus(parent);
}void TreeWidget::updateChildItemStatus(QTreeWidgetItem* item)
{int nCount = item->childCount();for (int nIndex = 0; nIndex < nCount; ++nIndex){auto child = item->child(nIndex);child->setCheckState(0, item->checkState(0));if (child->childCount() > 0){updateChildItemStatus(child);}}
}void TreeWidget::slot_treeItemChanged(QTreeWidgetItem* item, int)
{updateChildItemStatus(item);updateParentItemStatus(item);
}
  1. 构造函数和析构函数:

    • TreeWidget::TreeWidget(QWidget *parent):构造函数,初始化了UI并调用了initTree方法来初始化树形结构。
    • TreeWidget::~TreeWidget():析构函数,负责释放UI资源。
  2. addChild模板方法:

    • TreeWidget::addChild(T parent, const QString& text):是一个模板方法,用于添加树形结构中的子项(QTreeWidgetItem)。它创建一个新的子项,设置其显示文本为给定的文本,然后返回这个新的子项。
  3. initTree方法:

    • TreeWidget::initTree():在这个方法中,创建了一个树的顶层项(“top”)和一些子项和孙子项,形成了一个树形结构。设置了每个项的复选框状态,并最后展开了整个树。
  4. updateParentItemStatus和updateChildItemStatus方法:

    • TreeWidget::updateParentItemStatus(QTreeWidgetItem* item):递归更新父项的复选框状态。如果子项的状态与父项的状态不同,则设置父项的状态为部分选中。
    • TreeWidget::updateChildItemStatus(QTreeWidgetItem* item):递归更新子项的复选框状态,将其状态设置为与父项相同。
  5. slot_treeItemChanged槽函数:

    • TreeWidget::slot_treeItemChanged(QTreeWidgetItem* item, int):这是一个槽函数,与QTreeWidgetitemChanged信号连接。当树中的项的状态发生变化时,此槽函数被调用。它通过调用updateChildItemStatusupdateParentItemStatus方法来更新相关的子项和父项的状态。

相关文章:

树形结构的窗口小部件

这段代码是一个使用Qt框架的C程序&#xff0c;实现了一个树形结构的窗口小部件&#xff08;TreeWidget&#xff09;。以下是主要的解释&#xff1a; #include "treewidget.h" #include "ui_treewidget.h"TreeWidget::TreeWidget(QWidget *parent) : QWidg…...

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第一部分密码学的计算方法论计算安全加密的定义&#xff1a;对称加密算法 伪随机性伪随机生成器&#xff08;PRG&#xff09; 规约法规约证明 构造安全…...

Redis底层原理

持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程。所谓内存快照,就是…...

掌握亚马逊、Lazada、shopee、速卖通、eBay、wish测评自养号补单系统:解锁跨境电商新机遇

在选择测评环境系统时&#xff0c;市面上有很多选项。但是&#xff0c;究竟哪个系统使用起来更高效、成本更低、成功率更高呢&#xff1f;下面将详细分析各种网络环境的使用经验&#xff0c;希望能帮助大家避免一些不必要的困扰和错误。我曾经亲自尝试过各种网络环境&#xff0…...

15_多线程

文章目录 OS中的基本概念进程&#xff08;process&#xff09;与线程&#xff08;thread&#xff09;串行(serial)、并行(parallel)与并发(concurrency)同步(synchronization)与异步(asynchronization) java程序运行原理java命令主类类名运行原理 多线程的实现方式一&#xff1…...

吉他打谱软件Guitar Pro8苹果Mac电脑简体中文特别版

Guitar Pro 8 Mac是一款吉他编曲学习软件&#xff0c;用于吉他、贝和其他弦乐器的制谱和演奏&#xff0c;这是一个多轨编辑器&#xff0c;具有集成的 MIDI 编辑器、合唱绘图仪、吉他、节拍器和其他音乐家工具。它使您能够编辑吉他、贝司和尤克里里、乐谱、指法谱&#xff0c;并…...

go study oneday

这段代码的详细解释&#xff0c;涵盖了Go 语言变量声明、函数调用、用户输入、类型转换以及结果输出。 package main import "fmt" func main() {var num1 intvar num2 float32var num3 intfmt.Println("请输入数字一&#xff1a;")fmt.Scanln(&num1)f…...

Avatar虚拟数字人方案,元宇宙时代的企业新动力

随着元宇宙概念的兴起&#xff0c;虚拟数字人技术逐渐成为各行业关注的焦点。为了满足市场需求&#xff0c;美摄科技凭借专业、自研的虚拟数字人技术&#xff0c;结合强大的ChatGPT能力&#xff0c;隆重推出Avatar虚拟数字人方案&#xff0c;助力企业实现营销及内容创作的生产力…...

用golang 实现给图片添加文字水印

package mainimport ("fmt""github.com/golang/freetype""image""image/draw""image/jpeg""io""os""time" )func main() {// 打开原始图片file, err : os.Open("004.jpeg")if err …...

苹果电脑Markdown文本编辑Typora mac功能介绍

Typora mac是一款跨平台的Markdown编辑器&#xff0c;支持Windows、MacOS和Linux操作系统。它具有实时预览功能&#xff0c;能够自动将Markdown文本转换为漂亮的排版效果&#xff0c;让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…...

大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章

最近,使用大型语言模型(LLMs)和知识图谱(KG)开发 RAG(Retrieval Augmented Generation)流程引起了很大的关注。在这篇文章中,我将使用 LlamaIndex 和 NebulaGraph 来构建一个关于费城费利斯队(Philadelphia Phillies)的 RAG 流程。 我们用的是开源的 NebulaGraph 来…...

Vue 缓存Hook:提高接口性能,减少重复请求

前言 在开发 Web 应用时&#xff0c;我们经常会遇到需要重复调用接口的场景。例如&#xff0c;当用户频繁刷新页面或进行某个操作时&#xff0c;我们可能需要多次请求相同的数据。这不仅会增加服务器负担&#xff0c;还会导致用户体验下降。为此&#xff0c;我们可以使用缓存机…...

【Python机器学习】用于回归的决策树

用于回归的决策树与用于分类的决策树类似&#xff0c;在DecisionTreeRegressor中实现。DecisionTreeRegressor不能外推&#xff0c;也不能在训练数据范围之外的数据进行预测。 利用计算机内存历史及格的数据进行实验&#xff0c;数据展示&#xff1a; import pandas as pd im…...

numpy库的一些常用函数

文章目录 广播&#xff08;broadcast&#xff09;迭代数组数组运算修改数组的形状 修改数组维度连接数组分割数组数组元素的添加与删除Numpy算术函数Numpy 统计函数Numpy排序、条件筛选函数条件筛选 import numpy as np anp.arange(15).reshape(3,5)aarray([[ 0, 1, 2, 3, …...

成员变量与局部变量的区别?

如果你现在需要准备面试&#xff0c;可以关注我的公众号&#xff1a;”Tom聊架构“&#xff0c;回复暗号&#xff1a;”578“&#xff0c;领取一份我整理的50W字面试宝典&#xff0c;可以帮助你提高80%的面试通过率&#xff0c;价值很高&#xff01;&#xff01; 语法形式&…...

ES6---判断对象是否为{}

介绍 使用es6语法判断一个对象是否为{} 示例 使用ES6的Object.keys()方法&#xff0c;返回值是对象中属性名组成的数组 let obj {}let keys Object.keys(obj) if(keys.length){alert(对象不为{}) }else{alert(对象为{}) }代码地址 https://gitee.com/u.uu.com/js-test/b…...

高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例

详细介绍 MinIO 是一款流行的开源对象存储系统&#xff0c;设计上兼容 Amazon S3 API&#xff0c;主要用于私有云和边缘计算场景。它提供了高性能、高可用性以及易于管理的对象存储服务。以下是 MinIO 的详细介绍及优缺点&#xff1a; 架构与特性&#xff1a; 开源与跨平台&am…...

oracle重启数据库lsnrctl重启监听

oracle重启数据库lsnrctl重启监听 su到oracle用户下,命令 su - oracle切换需要启动的数据库实例&#xff1a; export ORACLE_SIDorcl进入Sqlplus控制台&#xff0c;命令&#xff1a; sqlplus /nolog以系统管理员登录&#xff0c;命令&#xff1a; connect / as sysdba如果是…...

08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置

目录 消息存储相关的配置★ 消息的存储介绍★ 消息过期时间及处理方式演示&#xff1a;log.cleanup.policy 属性配置 ★ 修改指定主题的消息保存时间演示&#xff1a;将 test2 主题下的消息的保存时间设为10个小时1、先查看test2主题下的配置2、然后设置消息的保存时间3、然后再…...

JAVA基础学习笔记-day15-File类与IO流

JAVA基础学习笔记-day15-File类与IO流 1. java.io.File类的使用1.1 概述1.2 构造器1.3 常用方法1、获取文件和目录基本信息2、列出目录的下一级3、File类的重命名功能4、判断功能的方法5、创建、删除功能 2. IO流原理及流的分类2.1 Java IO原理2.2 流的分类2.3 流的API 3. 节点…...

WPF ComboBox限制输入长度

在WPF中&#xff0c;你可以通过两种方式来限制ComboBox的输入长度&#xff1a; 使用PreviewTextInput事件&#xff1a;你可以在这个事件的处理程序中检查输入文本的长度&#xff0c;如果超过最大长度则阻止输入。 <ComboBox PreviewTextInput"ComboBox_PreviewTextIn…...

windows配置网络IP地址的方法

在Windows系统中配置网络IP地址&#xff0c;可以按照以下步骤进行&#xff1a; 打开“控制面板”&#xff0c;选择“网络和Internet”选项。在“网络和Internet”窗口中&#xff0c;单击“网络和共享中心”选项。在“网络和共享中心”窗口中&#xff0c;单击“更改适配器设置”…...

windows配置电脑网络IP的方法

通过控制面板配置IP地址&#xff1a; 打开控制面板&#xff1a; 可以通过在开始菜单中搜索“控制面板”来打开控制面板。选择“网络和Internet”或“网络和共享中心”&#xff1a; 在控制面板中&#xff0c;根据 Windows 版本不同&#xff0c;选中对应的选项进入网络设置。点击…...

MySQL,原子性rename

RENAME TABLE old_table TO backup_table, new_table TO old_table;...

FPGA之按键消抖

目录 1.原理 2.代码 2.1 key_filter.v 2.2 tb_key_filter.v 1.原理 按键分为自锁式按键和机械按键&#xff0c;图左边为自锁式按键 上图为RS触发器硬件消抖&#xff0c;当按键的个数比较多时常常使用软件消抖。硬件消抖会使用额外的器件占用电路板上的空间。 思路就是使用延…...

国内知名的技术平台

1、csdn&#xff0c;中文最大的技术交流平台 2、iteye&#xff0c;程序员的交流平台&#xff0c;归属csdn 3、cnblogs&#xff0c;这个也不错 4、简书也不错...

C#操作注册表

说明 今天用C#开发了一个简单的服务&#xff0c;需要设置成为自启动&#xff0c;网上有很多方法&#xff0c;放到启动运行等&#xff0c;但是今天想介绍一个&#xff0c;通过修改注册表实现&#xff0c;同时介绍一下操作注册表。 private void TestReg(){//仅对当前用户有效 H…...

Unity中BRP下的深度图

文章目录 前言一、在Shader中使用1、在使用深度图前申明2、在片元着色器中 二、在C#脚本中开启摄像机深度图三、最终效果 前言 在之前的文章中&#xff0c;我们实现了URP下的深度图使用。 Unity中URP下使用屏幕坐标采样深度图 在这篇文章中&#xff0c;我们来看一下BRP下深度…...

物联网的感知层、网络层与应用层分享

物联网的概念在很早以前就已经被提出&#xff0c;20世纪末期在美国召开的移动计算和网络国际会议就已经提出了物联网(Internet of Things)这个概念。 最先提出这个概念的是MIT Auto-ID中心的Ashton教授&#xff0c;他在研究RFID技术时&#xff0c;便提出了结合物品编码、互联网…...

kafka KRaft 集群搭建

kafka KRaft集群安装 包下载 https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgzkafka集群构建好后的数据目录结构 [rootlocalhost data]# tree /data/kafka /data/kafka ├── kafka-1 # 节点1源码目录 ├── kafka-2 # 节点2源码目录 ├── kafka-3 # 节点…...

网站要怎么做/数据分析网

Top NSD NETWORK DAY02 案例1&#xff1a;划分VLAN 案例2&#xff1a;多交换机VLAN的划分 案例3&#xff1a;配置trunk中继链路 案例4&#xff1a;链路聚合配置 案例5&#xff1a;配置静态路由 案例6&#xff1a;三层交换机基本配置 1 案例1&#xff1a;划分VLAN 1.1 问题…...

app界面素材/手机网站怎么优化

Java重定向输出流实现程序日志System中的out,error都是final类型的&#xff0c;不能做改动。但通过setOut()可以设置新的输出流&#xff0c;从而实现写日志的功能。import java.io.PrintStream; import java.io.FileNotFoundException; public class RedirectOutputStream { …...

wordpress用户权限管理/武汉seo主管

目前市面上管理BUG的平台很多&#xff0c;如 QC(Quality Center) 国际顶级&#xff0c;功能强大但收费。 Bugzilla 开源免费&#xff0c;功能还不错&#xff0c;但界面丑陋&#xff0c;配置繁琐。 EasyBUG 在线式&#xff0c;无需配置&#xff0c;但免费版的有10个人的人数…...

外贸婚纱网站/百度医生在线问诊

mysql增删改查相关操作以前用mysql用的少&#xff0c;对于数据库相关的操作不熟悉&#xff0c;现在开始要接触数据库了&#xff0c;记录一下相关的基础操作吧。1、数据库的授权操作# mysql -u root -pEnter password:mysql> grant all privileges on *.* to root% identifie…...

抚州seo快速排名/搜索引擎优化有哪些要点

cnpm : 无法加载文件 C:\Users\li\AppData\Roaming\npm\cnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。 问题&#xff1a; 解决方法: 1.以管理员身份运行power shell 2.输入 set-ExecutionPolicy RemoteSigned 然后输入A或者Y 回车 问题解决&#xff08;注意需要用管理员…...

做it软件的网站/谷歌搜索引擎大全

1.只有添加或删除文件&#xff0c;才与xcodeproj文件有关 2.本地新建文件&#xff0c;为未知文件&#xff0c;符号为问号&#xff1f;&#xff0c;添加文件先add为A文件后&#xff0c;再commit 3.删除文件为叹号&#xff0c;右键删除为D&#xff0c;删除本地已删除文件与xcodep…...