带复选框和简单描述的Qt QTreeWidget树形控件的简单使用
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树形控件的简单使用相关推荐
- html 复选框 mysql_Html:实现带复选框的下拉框(一)
概述 项目中要用到可多选的下拉框(select),发现HTML中无此控件,故手动模拟实现一下. 模拟所用元素:input,ul,li 代码 模拟实现带复选框的下拉列表 body{ margin: 20 ...
- element表格实现树形全选_vue+element UI实现树形表格带复选框的示例代码
一:在component文件夹下新建如下treeTable文件夹,里面有2个文件: eval.js:将数据转换成树形数据 /** * @Author: jianglei * @Date: 2017-1 ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单
jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...
- Material UI 带复选框表格获取选中值(索引)
vue+Material UI 带复选框表格获取选中值(索引) 发现问题 解决 写在最后 发现问题 神坑UI框架–Material,这款框架我不晓得为什么会这么坑,有这么多的问题为什么会被推出来,真的 ...
- HTML复选框里添加下拉框,Html:实现带复选框的下拉框(一)
概述 项目中要用到可多选的下拉框(select),发现HTML中无此控件,故手动模拟实现一下. 模拟所用元素:input,ul,li 代码 模拟实现带复选框的下拉列表 body{ margin: 20 ...
- itextpdf将带复选框的html_HTML基础知识
1 什么是HTML? HTML 指的是超文本标记语言 (Hyper Text Markup Language).不是一种编程语言,而是一种标记语言,标记语言是一套标记标签,HTML 使用标记标签来描述 ...
- html checkbox复选框更换背景,js实现点击切换checkbox背景图片的简单实例
在制作网页的过程中,经常需要实现点击切换背景图片的效果,本文关注的是表单中checkbox背景图片切换的实现.如图,在输入用户名和密码后,用户需要选择是否记住密码 图片背景为白色表示未勾选状态 ,背景 ...
- 关于JFace带复选框的树
树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用Con ...
- html带复选框的表格,Html 表格行 ID 复选框
我想将每一行的数据库表 id 作为动态 html 表的复选框值 我正在使用 ajax 从 mysql 数据库中获取数据并创建一个新变量作为 html 文本附加到表的 tbody 上 HTML代码 Vi ...
最新文章
- 创业公司自曝「被谷歌封杀」,阻断一切访问,上诉只得到机器人回复
- 【学术技巧】让你的 GitHub 秒变高大上!
- 编码utf-8的不可映射字符_不要在 MySQL 中使用“utf8”,请使用“utf8mb4”
- 物理DG主备库切换时遇到ORA-16139: media recovery required错误
- Word2019上面的MathType7.4插件忽然消失了【终极解决办法记录】
- 0309随堂笔记 银行转帐功能 对向封装 1615278206
- 快速教程:使用Cython来扩展Python/NumPy库
- 计算机教师职称申报工作总结,个人评定一级教师工作总结
- NYOJ-最少步数(dfs)
- 如何防止线程死锁java_Java 并发编程:如何防止在线程阻塞与唤醒时死锁
- 什么样的简历,面试官一看就知道多少水份!!!
- ubuntu系统grub引导修复
- 考勤打卡记录数据库表结构_中控zktime5.0考勤管理系统数据库表结构.doc
- python爬虫微信公众号视频
- Inverting Convolutional Networks with Convolutional Networks 论文理解
- VMware虚拟机启动失败:“DevicePowerOn”
- Python实现股票涨跌预测——随机森林模型
- 基于图像的场景三维建模
- 体重 年龄 性别 身高 预测鞋码_用身高和体重数据进行性别分类的实验报告
- 24小时制和12小时制am Matlab,十二钟头制与二十四小时制详解