Qt QTreeWidget树形控件的简单使用

  • 具有选择框的树形控件

具有选择框的树形控件

效果:当选中顶层的树形节点时,子节点全部被选中;当取消选中顶层树形节点时,子节点全部被取消;当选中子节点时,父节点显示部分选中的状态。

新建Qt Widgets Application,保留创建界面的复选框。成功后应如图所示:

双击“xxx.ui”文件,在Item Widgets拖拽出一个QTreeWidget
在头文件“xxx.h”中的声明代码:

#ifndef TESTTREEWIDGETDEMO_H
#define TESTTREEWIDGETDEMO_H#include <QWidget>
#include <QTreeWidget>
#include <QTreeWidgetItem>namespace Ui {class testTreeWidgetDemo;
}class testTreeWidgetDemo : public QWidget
{Q_OBJECT
public:explicit testTreeWidgetDemo(QWidget *parent = 0);~testTreeWidgetDemo();void initTreeWidget(); //初始化树void updateParentItem(QTreeWidgetItem *item);
public slots:void treeItemChanged(QTreeWidgetItem *item,int column); //槽函数
private://QTreeWidget *CommandTree; //自定义创建QStringList headers;  //树的表头Ui::testTreeWidgetDemo *ui;
};#endif // TESTTREEWIDGETDEMO_H

在源文件“xxx.cpp”中的实现功能代码:

#include "testTreeWidgetDemo.h"
#include "ui_testTreeWidgetDemo.h"
#include <QDebug>testTreeWidgetDemo::testTreeWidgetDemo(QWidget *parent) :QWidget(parent),ui(new Ui::testTreeWidgetDemo)
{ui->setupUi(this);initTreeWidget();connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));//绑定槽函数,当子节点的选择框选中时,上一级的节点对应改变,相向作用
}void testTreeWidgetDemo::initTreeWidget()
{ui->treeWidget->clear();    //Clears the tree widget by removing all of its items and selections.headers<<"Command List"<<"EN_Desp";
//    headers.append("Command List");
//    headers.append("EN_Desp");ui->treeWidget->setHeaderLabels(headers); //树表的表头QTreeWidgetItem *group1 = new  QTreeWidgetItem(ui->treeWidget); //父类是树部件的   子项目,第一个父节点group1->setText(0,"group1"); //第一列,名字group1->setText(1,"Zhe Shi Zhi Ling");  //第二列,对这个的简单描述group1->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);//给定标记,决定这个group1是否可以选中或者修改group1->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item11 = new QTreeWidgetItem(group1); //父类是group1的子项目item11->setText(0,"item11"); //设置名字item11->setText(1,"hello");item11->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item11->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item12 = new QTreeWidgetItem(group1); //父类是group1的子项目item12->setText(0,"item12"); //设置名字item12->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item12->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item13 = new QTreeWidgetItem(group1); //父类是group1的子项目item13->setText(0,"item13"); //设置名字item13->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item13->setCheckState(0,Qt::Unchecked); //选择状态为未选择//第二组QTreeWidgetItem *group2 = new  QTreeWidgetItem(ui->treeWidget); //父类是树部件的子项目group2->setText(0,"group2"); //第一列,名字group2->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);group2->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item21 = new QTreeWidgetItem(group2); //父类是group2的子项目item21->setText(0,"item21"); //设置名字item21->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item21->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item22 = new QTreeWidgetItem(group2); //父类是group2的子项目item22->setText(0,"item22"); //设置名字item22->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item22->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item23 = new QTreeWidgetItem(group2); //父类是group2的子项目item23->setText(0,"item23"); //设置名字item23->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item23->setCheckState(0,Qt::Unchecked); //选择状态为未选择//第三组QTreeWidgetItem *group3 = new  QTreeWidgetItem(ui->treeWidget); //父类是树部件的子项目group3->setText(0,"group3"); //第一列,名字group3->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);group3->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item31 = new QTreeWidgetItem(group3); //父类是group3的子项目item31->setText(0,"item31"); //设置名字item31->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item31->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item32 = new QTreeWidgetItem(group3); //父类是group3的子项目item32->setText(0,"item32"); //设置名字item32->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item32->setCheckState(0,Qt::Unchecked); //选择状态为未选择QTreeWidgetItem *item33 = new QTreeWidgetItem(group3); //父类是group3的子项目item33->setText(0,"item33"); //设置名字item33->setFlags(Qt::ItemIsUserCheckable |Qt::ItemIsEnabled | Qt::ItemIsSelectable);item33->setCheckState(0,Qt::Unchecked); //选择状态为未选择
}void testTreeWidgetDemo::treeItemChanged(QTreeWidgetItem *item, int column)
{QString itemText = item->text(0); //返回指定列中的文本if(Qt::Checked == item -> checkState(0)) //checkState(column)返回给定列 中 标签的检查状态(选择状态){QTreeWidgetItem* parent = item->parent();  //项目的上一级?int count = item->childCount(); //返回当前节点的子节点的数目if(count > 0) //是树节点{for (int i = 0; i<count ; i++){//选择子节点,然后将它设置为选中状态item->child(i)->setCheckState(0,Qt::Checked); //child(i)返回项在子项列表中给定索引处的项}}else //没有子节点,叶子{//是子节点updateParentItem(item);}}else if (Qt::Unchecked == item->checkState(0)){int count = item->childCount();if(count > 0){for(int i = 0 ;i<count;i++){item->child(i)->setCheckState(0,Qt::Unchecked);}}else{//是子节点updateParentItem(item);}}
}void testTreeWidgetDemo::updateParentItem(QTreeWidgetItem *item)    //更新状态
{QTreeWidgetItem* parent = item->parent();if(parent==NULL) //没有父节点,就是根节点{return;}//选中的子节点个数int selectCount=0;int childCount= parent->childCount();for(int i=0;i<childCount;i++){QTreeWidgetItem *childItem = parent->child(i);if(childItem->checkState(0)== Qt::Checked){selectCount++;}}if(selectCount<=0){//选中状态/半选中状态 -->更改为未选中状态parent->setCheckState(0,Qt::Unchecked);}else if(selectCount>0 && selectCount<childCount){//未选中状态/选中状态 -->更改为部分选中状态parent->setCheckState(0,Qt::PartiallyChecked); //部分选中}else if(selectCount==childCount) {//未选中状态/半选中状态 -->更改为选中状态parent->setCheckState(0,Qt::Checked);}
}
testTreeWidgetDemo::~testTreeWidgetDemo()
{delete ui;
}

运行结果:

树表还需要控制一下,刚生成列间距太大了,拖动滚动条,然后拉去第二列靠近第一列才可以实现如图所示效果。

1以上内容基于qt5开发于实例第二版陆文周p47-50页

带复选框和简单描述的Qt QTreeWidget树形控件的简单使用相关推荐

  1. html 复选框 mysql_Html:实现带复选框的下拉框(一)

    概述 项目中要用到可多选的下拉框(select),发现HTML中无此控件,故手动模拟实现一下. 模拟所用元素:input,ul,li 代码 模拟实现带复选框的下拉列表 body{ margin: 20 ...

  2. element表格实现树形全选_vue+element UI实现树形表格带复选框的示例代码

    一:在component文件夹下新建如下treeTable文件夹,里面有2个文件: eval.js:将数据转换成树形数据 /** * @Author: jianglei * @Date: 2017-1 ...

  3. 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单

    jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...

  4. Material UI 带复选框表格获取选中值(索引)

    vue+Material UI 带复选框表格获取选中值(索引) 发现问题 解决 写在最后 发现问题 神坑UI框架–Material,这款框架我不晓得为什么会这么坑,有这么多的问题为什么会被推出来,真的 ...

  5. HTML复选框里添加下拉框,Html:实现带复选框的下拉框(一)

    概述 项目中要用到可多选的下拉框(select),发现HTML中无此控件,故手动模拟实现一下. 模拟所用元素:input,ul,li 代码 模拟实现带复选框的下拉列表 body{ margin: 20 ...

  6. itextpdf将带复选框的html_HTML基础知识

    1 什么是HTML? HTML 指的是超文本标记语言 (Hyper Text Markup Language).不是一种编程语言,而是一种标记语言,标记语言是一套标记标签,HTML 使用标记标签来描述 ...

  7. html checkbox复选框更换背景,js实现点击切换checkbox背景图片的简单实例

    在制作网页的过程中,经常需要实现点击切换背景图片的效果,本文关注的是表单中checkbox背景图片切换的实现.如图,在输入用户名和密码后,用户需要选择是否记住密码 图片背景为白色表示未勾选状态 ,背景 ...

  8. 关于JFace带复选框的树

    树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用Con ...

  9. html带复选框的表格,Html 表格行 ID 复选框

    我想将每一行的数据库表 id 作为动态 html 表的复选框值 我正在使用 ajax 从 mysql 数据库中获取数据并创建一个新变量作为 html 文本附加到表的 tbody 上 HTML代码 Vi ...

最新文章

  1. 创业公司自曝「被谷歌封杀」,阻断一切访问,上诉只得到机器人回复
  2. 【学术技巧】让你的 GitHub 秒变高大上!
  3. 编码utf-8的不可映射字符_不要在 MySQL 中使用“utf8”,请使用“utf8mb4”
  4. 物理DG主备库切换时遇到ORA-16139: media recovery required错误
  5. Word2019上面的MathType7.4插件忽然消失了【终极解决办法记录】
  6. 0309随堂笔记 银行转帐功能 对向封装 1615278206
  7. 快速教程:使用Cython来扩展Python/NumPy库
  8. 计算机教师职称申报工作总结,个人评定一级教师工作总结
  9. NYOJ-最少步数(dfs)
  10. 如何防止线程死锁java_Java 并发编程:如何防止在线程阻塞与唤醒时死锁
  11. 什么样的简历,面试官一看就知道多少水份!!!
  12. ubuntu系统grub引导修复
  13. 考勤打卡记录数据库表结构_中控zktime5.0考勤管理系统数据库表结构.doc
  14. python爬虫微信公众号视频
  15. Inverting Convolutional Networks with Convolutional Networks 论文理解
  16. VMware虚拟机启动失败:“DevicePowerOn”
  17. Python实现股票涨跌预测——随机森林模型
  18. 基于图像的场景三维建模
  19. 体重 年龄 性别 身高 预测鞋码_用身高和体重数据进行性别分类的实验报告
  20. 24小时制和12小时制am Matlab,十二钟头制与二十四小时制详解

热门文章

  1. 淘宝搜索相关关键词查询易语言代码
  2. 怎么将在线pdfword转换器使用
  3. 用C#做图片轮播效果
  4. TX1 安装 ROS Indigo
  5. excel无法复制粘贴已保护的工作表
  6. 17_小米监控Open-Falcon:Mongodb监控
  7. 新闻 | Hadoop开源技术领域的行业变局
  8. 华为“引商”,VR“刻羽”,共觅知音人
  9. 记录一个小黑码奴的二十七八岁
  10. python安装dill_Python dill