树形结构的窗口小部件
这段代码是一个使用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);
}
-
构造函数和析构函数:
TreeWidget::TreeWidget(QWidget *parent):构造函数,初始化了UI并调用了initTree方法来初始化树形结构。TreeWidget::~TreeWidget():析构函数,负责释放UI资源。
-
addChild模板方法:
TreeWidget::addChild(T parent, const QString& text):是一个模板方法,用于添加树形结构中的子项(QTreeWidgetItem)。它创建一个新的子项,设置其显示文本为给定的文本,然后返回这个新的子项。
-
initTree方法:
TreeWidget::initTree():在这个方法中,创建了一个树的顶层项(“top”)和一些子项和孙子项,形成了一个树形结构。设置了每个项的复选框状态,并最后展开了整个树。
-
updateParentItemStatus和updateChildItemStatus方法:
TreeWidget::updateParentItemStatus(QTreeWidgetItem* item):递归更新父项的复选框状态。如果子项的状态与父项的状态不同,则设置父项的状态为部分选中。TreeWidget::updateChildItemStatus(QTreeWidgetItem* item):递归更新子项的复选框状态,将其状态设置为与父项相同。
-
slot_treeItemChanged槽函数:
TreeWidget::slot_treeItemChanged(QTreeWidgetItem* item, int):这是一个槽函数,与QTreeWidget的itemChanged信号连接。当树中的项的状态发生变化时,此槽函数被调用。它通过调用updateChildItemStatus和updateParentItemStatus方法来更新相关的子项和父项的状态。
相关文章:
树形结构的窗口小部件
这段代码是一个使用Qt框架的C程序,实现了一个树形结构的窗口小部件(TreeWidget)。以下是主要的解释: #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》 写在最前面私钥加密与伪随机性 第一部分密码学的计算方法论计算安全加密的定义:对称加密算法 伪随机性伪随机生成器(PRG) 规约法规约证明 构造安全…...
Redis底层原理
持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程。所谓内存快照,就是…...
掌握亚马逊、Lazada、shopee、速卖通、eBay、wish测评自养号补单系统:解锁跨境电商新机遇
在选择测评环境系统时,市面上有很多选项。但是,究竟哪个系统使用起来更高效、成本更低、成功率更高呢?下面将详细分析各种网络环境的使用经验,希望能帮助大家避免一些不必要的困扰和错误。我曾经亲自尝试过各种网络环境࿰…...
15_多线程
文章目录 OS中的基本概念进程(process)与线程(thread)串行(serial)、并行(parallel)与并发(concurrency)同步(synchronization)与异步(asynchronization) java程序运行原理java命令主类类名运行原理 多线程的实现方式一࿱…...
吉他打谱软件Guitar Pro8苹果Mac电脑简体中文特别版
Guitar Pro 8 Mac是一款吉他编曲学习软件,用于吉他、贝和其他弦乐器的制谱和演奏,这是一个多轨编辑器,具有集成的 MIDI 编辑器、合唱绘图仪、吉他、节拍器和其他音乐家工具。它使您能够编辑吉他、贝司和尤克里里、乐谱、指法谱,并…...
go study oneday
这段代码的详细解释,涵盖了Go 语言变量声明、函数调用、用户输入、类型转换以及结果输出。 package main import "fmt" func main() {var num1 intvar num2 float32var num3 intfmt.Println("请输入数字一:")fmt.Scanln(&num1)f…...
Avatar虚拟数字人方案,元宇宙时代的企业新动力
随着元宇宙概念的兴起,虚拟数字人技术逐渐成为各行业关注的焦点。为了满足市场需求,美摄科技凭借专业、自研的虚拟数字人技术,结合强大的ChatGPT能力,隆重推出Avatar虚拟数字人方案,助力企业实现营销及内容创作的生产力…...
用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编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…...
大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章
最近,使用大型语言模型(LLMs)和知识图谱(KG)开发 RAG(Retrieval Augmented Generation)流程引起了很大的关注。在这篇文章中,我将使用 LlamaIndex 和 NebulaGraph 来构建一个关于费城费利斯队(Philadelphia Phillies)的 RAG 流程。 我们用的是开源的 NebulaGraph 来…...
Vue 缓存Hook:提高接口性能,减少重复请求
前言 在开发 Web 应用时,我们经常会遇到需要重复调用接口的场景。例如,当用户频繁刷新页面或进行某个操作时,我们可能需要多次请求相同的数据。这不仅会增加服务器负担,还会导致用户体验下降。为此,我们可以使用缓存机…...
【Python机器学习】用于回归的决策树
用于回归的决策树与用于分类的决策树类似,在DecisionTreeRegressor中实现。DecisionTreeRegressor不能外推,也不能在训练数据范围之外的数据进行预测。 利用计算机内存历史及格的数据进行实验,数据展示: import pandas as pd im…...
numpy库的一些常用函数
文章目录 广播(broadcast)迭代数组数组运算修改数组的形状 修改数组维度连接数组分割数组数组元素的添加与删除Numpy算术函数Numpy 统计函数Numpy排序、条件筛选函数条件筛选 import numpy as np anp.arange(15).reshape(3,5)aarray([[ 0, 1, 2, 3, …...
成员变量与局部变量的区别?
如果你现在需要准备面试,可以关注我的公众号:”Tom聊架构“,回复暗号:”578“,领取一份我整理的50W字面试宝典,可以帮助你提高80%的面试通过率,价值很高!! 语法形式&…...
ES6---判断对象是否为{}
介绍 使用es6语法判断一个对象是否为{} 示例 使用ES6的Object.keys()方法,返回值是对象中属性名组成的数组 let obj {}let keys Object.keys(obj) if(keys.length){alert(对象不为{}) }else{alert(对象为{}) }代码地址 https://gitee.com/u.uu.com/js-test/b…...
高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例
详细介绍 MinIO 是一款流行的开源对象存储系统,设计上兼容 Amazon S3 API,主要用于私有云和边缘计算场景。它提供了高性能、高可用性以及易于管理的对象存储服务。以下是 MinIO 的详细介绍及优缺点: 架构与特性: 开源与跨平台&am…...
oracle重启数据库lsnrctl重启监听
oracle重启数据库lsnrctl重启监听 su到oracle用户下,命令 su - oracle切换需要启动的数据库实例: export ORACLE_SIDorcl进入Sqlplus控制台,命令: sqlplus /nolog以系统管理员登录,命令: connect / as sysdba如果是…...
08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置
目录 消息存储相关的配置★ 消息的存储介绍★ 消息过期时间及处理方式演示:log.cleanup.policy 属性配置 ★ 修改指定主题的消息保存时间演示:将 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. 节点…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
