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",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- Codeforces Round #323 (Div. 2) B 贪心,暴力
B. Robot's Task time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- [USACO Section 5.3]量取牛奶 Milk Measuring (动态规划,背包$dp$)
题目链接 Solution 完全背包 \(dp\) , 同时再加一个数组 \(v[i][j]\) 记录当总和为\(j\) 时第 \(i\) 种物品是否被选. 为保证从小到大和字典序,先将瓶子按大小排序 ...
- vi 使用介绍
参考 <<vi编辑器使用介绍>>文本编辑器有很多,比如图形模式的gedit.kwrite.OpenOffice ,文本模式下的编辑器有vi.vim(vi的增强版本)和nano, ...
- hibernate的各个jar包的作用
hibernate的各个jar包的作用 最基本的Hibernate3.3.2之 JAR包(必要): 包名 位置 用途 hibernate3.jar /hibernate 核心JAR包 antlr.ja ...
- 心跳 CSS
生活中我们所见到的大部分图形(正方形.长方形.圆形.椭圆.三角形.多边形...)都是可以用css3来实现,以及一些复杂点的图形——其实都是由基本图形组合而成的. 由于明天就是情人节了,所以今天我们就用 ...
- 关于C++的字符串操作
自己懒得打,就贴一个dalao的网址吧.常用. http://blog.csdn.net/fenxinzi557/article/details/51457829
- mongoDB最新版安装
转载自:http://www.higis.org/2012/04/25/ubuntu-install-mongodb/ ubuntu上安装mongodb本可以直接通过sudo apt-get inst ...
- SQL触发器的使用及语法
原文发布时间为:2010-08-07 -- 来源于本人的百度文章 [由搬家工具导入] ===以下转qsfwy.javaeye.com/blog/424789定义: 何为触发器?在SQL Server里 ...
- java网络编程学习笔记(二):socket详解
1.Socket有多种构造方法,大多数构造方法在构造的时候就指定了连接的主机和端口号.当客户端的构造方法与服务器连接的时候,可能需要等待一段时间,因为需要建立连接.默认情况下,Socket的构造方法会 ...
- Python学习杂记_8_从程序外部传参的办法sys.argv
Python用 sys.argv[] 实现从程序外部传参 “外部”的含义,其实就是这些参数不是你在程序中定义的,而是在程序之外通过输入操作传递进来的.sys.argv 会返回一个元组,元组的首个元素即 ...