QTreeWidget 的用法
Qt QTreeWidget
新建一个Qt Widgets Application,拖拽一个Tree Widget 到 ui 界面上,最后实现的效果如下:
添加代码 //test.h //在头文件里添加两个公用函数还有一个槽函数的声明 #include <QTreeWidgetItem> public: void initTreeWidget(); void updateParentItem(QTreeWidgetItem *item); public: void treeItemChanged(QTreeWidgetItem *item,int column); //test.cpp //在构造函数里添加 connect() initTreeWidget(); connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem *,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int))); //initTreeWidget() 的实现 void test::initTreeWidget() { ui->treeWidget->clear(); //第一组 QTreeWidgetItem *group1=new QTreeWidgetItem(ui->treeWidget); group1->setText(,"group1"); group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); group1->setCheckState(,Qt::Unchecked); QTreeWidgetItem *item11=new QTreeWidgetItem(group1); item11->setText(,"item11"); item11->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); item11->setCheckState(,Qt::Unchecked); QTreeWidgetItem *item12=new QTreeWidgetItem(group1); item12->setText(,"item12"); item12->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); item12->setCheckState(,Qt::Unchecked); QTreeWidgetItem *item13=new QTreeWidgetItem(group1); item13->setText(,"item13"); item13->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); item13->setCheckState(,Qt::Unchecked); //第二组 QTreeWidgetItem *group2=new QTreeWidgetItem(ui->treeWidget); group2->setText(,"group2"); group2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); group2->setCheckState(,Qt::Unchecked); QTreeWidgetItem *item21=new QTreeWidgetItem(group2); item21->setText(,"item21"); item21->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); item21->setCheckState(,Qt::Unchecked); QTreeWidgetItem *item22=new QTreeWidgetItem(group2); item22->setText(,"item22"); item22->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); item22->setCheckState(,Qt::Unchecked); QTreeWidgetItem *item23=new QTreeWidgetItem(group2); item23->setText(,"item23"); item23->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); item23->setCheckState(,Qt::Unchecked); } //treeItemChanged(QTreeWidgetItem *item, int column)的实现 void test::treeItemChanged(QTreeWidgetItem *item, int column) { QString itemText=item->text(); //选中时 if(Qt::Checked==item->checkState()) { QTreeWidgetItem* parent=item->parent(); int count=item->childCount(); if(count>) { for(int i=;i<count;i++) { //子节点也被选中 item->child(i)->setCheckState(,Qt::Checked); } } else { //是子节点 updateParentItem(item); } } else if(Qt::Unchecked==item->checkState()) { int count=item->childCount(); if(count>) { for(int i=;i<count;i++) { item->child(i)->setCheckState(,Qt::Unchecked); } } else { //是子节点 updateParentItem(item); } } } //updateParentItem(QTreeWidgetItem *item) 的实现 void test::updateParentItem(QTreeWidgetItem *item) { QTreeWidgetItem* parent=item->parent(); if(parent==NULL) { return; } //选中的子节点个数 int selectCount=; int childCount=parent->childCount(); for(int i=;i<childCount;i++) { QTreeWidgetItem *childItem=parent->child(i); if(childItem->checkState()==Qt::Checked) { selectCount++; } } if(selectCount<=) { //选中状态 parent->setCheckState(,Qt::Unchecked); } else if(selectCount> && selectCount<childCount) { //部分选中状态 parent->setCheckState(,Qt::PartiallyChecked); } else if(selectCount==childCount) { //未选中状态 parent->setCheckState(,Qt::Checked); } }
QTreeWidget 的用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- css 两列自适应布局的4种思路
前面的话 前面已经介绍过css 两列布局中单列定宽单列自适应布局的6种思路的两列布局,而两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式.本文将从float.table.flex和gri ...
- Java 学习(1): windows java 运行& 环境配置
Java 文件的运行 如下,创建了一个 名为"HelloWorld.java" 的 Java 文件: public class HelloWorld { public static ...
- 部署私有Docker Registry
安装部署一个私有的Docker Registry是引入.学习和使用Docker这门技术的必经之路之一.尤其是当Docker被所在组织接受,更多人.项目和产品开始接触和使用Docker时,存储和分发自制 ...
- Codeforces 920D Tanks
题目链接 题意 有 \(n\) 个容积无限的水缸,初始时水量为\(a_1,a_2,...,a_n\),有一把容积为\(k\)的勺子,可以从一个水缸中舀水倒入另一个水缸中.问能否给出操作序列,使得最终某 ...
- bzoj 2844 albus就是要第一个出场 异或和出现次数 线性基
题目链接 题意 给定\(n\)个数,将其所有的子集(\(2^n\)个)的异或和按升序排列.给出一个询问\(q\),问\(q\)在该序列中第一次出现位置的下标(下标从\(1\)开始). 题解 结论 记其 ...
- awk 使用方法
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- Eigen--简单的C++矩阵计算库
晚上突然想写一段小C++程序,要用到矩阵求逆呀乘法呀之类的,所以找了一下有什么现成的可用的C++矩阵计算相关的库,发现有一大堆,在其中各种各样的配置,感觉比较麻烦.从方便性来说Eigen是最方便的了, ...
- yii框架美化访问路径,去掉index.php/?r=部分
一.找到配置文件(ps:advance高级模板) 在工程目录-> backend目录 或 frontend目录 -> config目录 -> main.php文件 -> 在 r ...
- gitlab+gerrit+jenkins
gitlab-repo 指在 gitlab 上的代码库, gerrit-repo 指在 gerrit 上的代码库: 从 gitlab-repo 上获取代码 本地修改, 提交 push 到 gerrit ...
- 使用dvajs+webpack构建react开发环境
之前我有写过博文介绍过dva.js及其用法,dva.js固然是个非常优秀的框架,但是如果用dev-cli来创建的话就会默认绑定使用roadhog而不是webpack.鉴于roadhog的文档要明显少于 ...