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",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- bzoj 3101 N皇后构造一种解 数学
3101: N皇后 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 70 Solved: 32[Submit][S ...
- Position 属性的学习理解
position 当时在学习的时候也没有进入深入的研究,主要是因为平时自己用的不是很多.今天看到了篇解释不错的文章就整理,学习下. http://www.cnblogs.com/bokin/archi ...
- 【HDOJ5996】dingyeye loves stone(Nim游戏)
题意:dingyeye喜欢和你玩石子游戏.dingyeye有一棵n个节点的有根树,节点编号为0到n−1,根为0号节点. 游戏开始时,第i个节点上有a[i]个石子.两位玩家轮流操作,每次操作玩家可以选择 ...
- 解决Navicat 报错:1130-host ... is not allowed to connect to this MySql server,MySQL不允许从远程访问的方法
1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...
- luogu 3407 散步
题目链接 题意 按从左到右的顺序给出数轴上的一群人,有人向左走,有人向右走,一旦两人相遇就会停在当前位置,后来走到该位置的人也会停在该位置.问经过一段时间这些人分别在什么位置. 思路 可以将这些人分为 ...
- TCP/IP协议详解笔记——ARP协议和RARP协议
ARP:地址解析协议 对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址.ARP协议为IP地址到对应的硬件地址之间提供动态映射. 工作过 ...
- MySQL数据库”mysql SQL Error:1146,SQLState:42S02 “解决方法
项目在开发的时候在Mac平台下开发的,开发完了之后在LINUX环境上部署好之后,运行时MySQL数据库报错,提示为某个表不存在之类的错误信息,后来修改了MySQL的配置文件将大小写敏感去掉,问题解决. ...
- 设置div自适应高度滚动
<body> <div id="divc" style="overflow: auto;"> </div> <a id ...
- NBNS扫描工具nbtscan-unixwiz
NBNS扫描工具nbtscan-unixwiz NBNS是NetBIOS Name Service的缩写,表示NetBIOS名称解析服务.NETBIOS是一种网络协议,用于实现消息通信和资源共享.利用 ...
- Unique Binary Search Trees II - LeetCode
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...