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

Qt/C++学习系列之QTreeWidget的简单使用记录

Qt/C++学习系列之QTreeWidget的简单使用记录

  • 前言
  • 1布局
    • 1.1布局要求
    • 1.2布局代码
  • 2代码设计
    • 2.1整体勾选
    • 2.2勾选项确认
  • 总结


前言

自己练手的项目中,需要对多个不同层级的选项进行勾选操作,而想到简洁点的操作方式就是使用QTreeWidget进行布局与应用。这里简单介绍QTreeWidget的布局和勾选操作的应用。


1布局

1.1布局要求

项目要求:项目中需要有两个层级,A层级为大层级,B层级为小层级。当勾选A层级后,表示将B层级所有勾选,并且点击A层级,可展现所有B层级。
在这里插入图片描述
类似图中的效果,也就是可以勾选A,也可以通过A来展开显示B。

1.2布局代码

    QTreeWidgetItem *inflateItem = new QTreeWidgetItem(ui->treeWidget);inflateItem->setText(0, "A");inflateItem->setCheckState(0, Qt::Unchecked);for (int i = 1; i <= 12; ++i) {QTreeWidgetItem *child = new QTreeWidgetItem(inflateItem);child->setText(0, QString("B %1").arg(i));child->setCheckState(0, Qt::Unchecked);}
  • QTreeWidget 中动态创建一个顶级项及其子项,并设置它们的文本和勾选状态。
  • 创建一个新的 QTreeWidgetItem 对象,并将其添加到 QTreeWidget 控件中。inflateItem 是一个顶级项。通过setText和setCheckState来设置文本内容和勾选。
  • 在inflateItem的基础上接着定义子项:QTreeWidgetItem *child = new QTreeWidgetItem(inflateItem);

2代码设计

2.1整体勾选

使用信号与槽操作,检查一个 QTreeWidgetItem 是否有子项,如果有子项,则调用 updateChildCheckState 函数来更新这些子项的勾选状态,使其与父项的勾选状态一致。

if (item->childCount() > 0) { // 如果是顶层节点updateChildCheckState(item, item->checkState(column));}

这里是信号与槽的连接。

connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &MainWindow::onItemChanged);

2.2勾选项确认

QTreeWidget 控件中获取所有被勾选的顶级项和子项,并将它们的文本内容存储到一个 QStringList 中,最后通过一个消息框显示这些勾选的项。

    QStringList checkedItems;for (int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) {QTreeWidgetItem *topItem = ui->treeWidget->topLevelItem(i);if (topItem->checkState(0) == Qt::Checked) {checkedItems.append(topItem->text(0));}for (int j = 0; j < topItem->childCount(); ++j) {QTreeWidgetItem *childItem = topItem->child(j);if (childItem->checkState(0) == Qt::Checked) {checkedItems.append("  " + childItem->text(0)); // 添加缩进以区分层级}}}QMessageBox::information(nullptr, "勾选的项", checkedItems.join("\n"));
  • topLevelItemCount():顶层的数量。
  • childCount():顶层基础上,子项的数据。

总结

这里简单介绍了项目对QTreeWidget的简单使用记录!

相关文章:

  • IPD项目管理的“黄金三角“在2025年是否需要重构?
  • 基于RV1126开发板获取系统温度
  • WPS Office安卓版文档编辑功能与兼容性评测【高效编辑】
  • uniappx项目上架各手机平台
  • Uniapp:消息提示框
  • vue3 vite创建项目 vite配置、pinia配置
  • 经典算法 判断一个图中是否有环
  • 界面控件DevExpress .NET MAUI v24.2亮点:MVVM功能增强
  • Rust学习之实现命令行小工具minigrep(二)
  • qt/C++面试题自用学习(更新中)
  • Gitlab SSH Jenkins Pipeline Supervisor部署
  • 大模型训练显存压缩实战:ZeRO-3 vs 梯度累积 vs 量化混合策略
  • 深度为16,位宽8bit的单端口SRAM——学习记录
  • 全网通emotn ui桌面免费吗?如何开机自启动
  • leetcode:3210. 找出加密后的字符串(python3解法)
  • 淘宝商品数据高并发采集方案:API 接口限流机制与分布式调用实战
  • SnailJob:分布式环境设计的任务调度与重试平台!
  • Centos/RedHat 7.x服务器挂载ISCSI存储示例(无多路径非LVM)
  • opencv腐蚀的操作过程
  • DeepSeek高阶玩法教程:从入门到精通的实战案例
  • 两部门调度部署“五一”假期安全防范工作,要求抓好旅游安全
  • 融创服务全面退出彰泰服务集团:约8.26亿元出售广西彰泰融创智慧80%股权
  • 特朗普执政百日集会吹嘘政绩,美国消费者信心指数跌至疫情以来最低
  • 力箭二号火箭成功进行满载起竖试验,计划今年首飞发射轻舟飞船
  • 日本大米价格连续16周上涨,再创最高纪录
  • 报告显示2024年全球军费开支增幅达冷战后最大