当前位置: 首页 > 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方法来更新相关的子项和父项的状态。
http://www.lryc.cn/news/277297.html

相关文章:

  • 【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》
  • Redis底层原理
  • 掌握亚马逊、Lazada、shopee、速卖通、eBay、wish测评自养号补单系统:解锁跨境电商新机遇
  • 15_多线程
  • 吉他打谱软件Guitar Pro8苹果Mac电脑简体中文特别版
  • go study oneday
  • Avatar虚拟数字人方案,元宇宙时代的企业新动力
  • 用golang 实现给图片添加文字水印
  • 苹果电脑Markdown文本编辑Typora mac功能介绍
  • 大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章
  • Vue 缓存Hook:提高接口性能,减少重复请求
  • 【Python机器学习】用于回归的决策树
  • numpy库的一些常用函数
  • 成员变量与局部变量的区别?
  • ES6---判断对象是否为{}
  • 高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例
  • oracle重启数据库lsnrctl重启监听
  • 08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置
  • JAVA基础学习笔记-day15-File类与IO流
  • WPF ComboBox限制输入长度
  • windows配置网络IP地址的方法
  • windows配置电脑网络IP的方法
  • MySQL,原子性rename
  • FPGA之按键消抖
  • 国内知名的技术平台
  • C#操作注册表
  • Unity中BRP下的深度图
  • 物联网的感知层、网络层与应用层分享
  • kafka KRaft 集群搭建
  • oracle角色管理