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

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


前言

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


1布局

1.1布局要求

项目要求:项目中需要有两个层级,A层级为大层级,B层级为小层级。当勾选A层级后,表示将B层级所有勾选,并且点击A层级,可展现所有B层级。

类似图中的效果,也就是可以勾选A,也可以通过A来展开显示B。

1.2布局代码

cpp 复制代码
    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 函数来更新这些子项的勾选状态,使其与父项的勾选状态一致。

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

这里是信号与槽的连接。

cpp 复制代码
connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &MainWindow::onItemChanged);

2.2勾选项确认

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

cpp 复制代码
    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的简单使用记录!

相关推荐
Molesidy42 分钟前
【VSCode】【Clangd】Win下的基于LLVM/Clangd+Clangd插件+MINGW+CMake的VSCode配置C/C++开发环境的详细教程
c++·ide·vscode·clangd·llvm
椰壳也可1 小时前
06_作业基于CubeMx实现按键控制LED灯(裸机)(立芯嵌入式笔记)
笔记·stm32·学习
Mr_WangAndy2 小时前
C++_chapter13_C++并发与多线程_多线程概念,死锁,unique_lock(),lock_guard()使用
c++·lock·死锁·并发与多线程·unlock·lock_guard·unique_lock
im_AMBER2 小时前
Leetcode 52
笔记·学习·算法·leetcode
小欣加油2 小时前
leetcode 946 验证栈序列
c++·算法·leetcode·职场和发展
神仙别闹2 小时前
基于QT(C++) 实现哈夫曼压缩(多线程)
java·c++·qt
小陈又菜3 小时前
【QT学习之路】网络通信新次元!Qt TCP双侠:Server监听瞬息,Socket连接万变
qt·网络协议·tcp/ip·socket
无敌最俊朗@3 小时前
C++ 并发与同步速查笔记(整理版)
开发语言·c++·算法
神仙别闹3 小时前
基于 C++和 Python 实现计算机视觉
c++·python·计算机视觉
菜鸟‍4 小时前
【前端学习】阿里前端面试题
前端·javascript·学习