QTreeWidget中的复选框及三态使用

更新时间:2023-07-18 22:23:24 阅读: 评论:0

QTreeWidget中的复选框及三态使⽤
QTreeWidget中的复选框及三态:勾选,未勾选,半勾选使⽤
在树形结构中有时候需要在每项前添加复选框,QTreeWidgetItem的复选框可以通过tCheckState(int column,Qt::CheckState state)⽅法调出。
勾选状态的改变,通过itemChanged(QTreeWidgetItem *item,int column)信号触发。
connect(ui->treeWidget,&QTreeWidget::itemChanged,this,&Widget::ItemCheckChanged);
//添加⼀个所有区域的顶级
QTreeWidgetItem *itemAll = new QTreeWidgetItem
(ui->treeMain, QStringList("所有区域[-1]")); //tempAreaParent
itemAll->tIcon(0, QIcon(":/image/Area.png"));
itemAll->tCheckState(0,Qt::Unchecked);
//绑定树选取事件
connect(ui->treeMain,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));
实现树形结构的勾选常⽤操作:
1、⽗项勾选后,⼦项⾃动全部勾选
2、⼦项部分勾选后,⽗项为部分选中状态
3、当⼦项全部勾选后,⽗项也会随之勾选
void frmMain::treeItemChanged(QTreeWidgetItem *item, int column)
{
QString itemText = item->text(0);
雅思范文if (item->checkState(0) == Qt::Checked)
{
QTreeWidgetItem *parent = item->parent();
int cnt = item->childCount();
我的周末英语作文if (cnt >0)
{
for (int i = 0;i < cnt;i++)
{
item->child(i)->tCheckState(0,Qt::Checked);
}
}
el
{
updateParentItem(item);
}
急忙造句}
el if (item->checkState(0) == Qt::Unchecked)
{
int cnt = item->childCount();
if (cnt > 0)
{
for (int i = 0;i < cnt;i++)
{
{
item->child(i)->tCheckState(0,Qt::Unchecked);
}
}
el
{
updateParentItem(item);
}
}
}
void frmMain::updateParentItem(QTreeWidgetItem *item)
身上痒一挠就起疙瘩怎么治{
QTreeWidgetItem *parent = item->parent();
if (parent == NULL)
{
return;
}
//选中的⼦节点个数
int lectedCount = 0;
int childCount = parent->childCount();
for (int i = 0; i < childCount; i++)
{
QTreeWidgetItem *childItem = parent->child(i);
动漫女生图片if (childItem->checkState(0) == Qt::Checked)
{
lectedCount++;
}
中国近代发展史
}
十年后的自己作文
if (lectedCount <= 0)
{
//未选中状态
parent->tCheckState(0, Qt::Unchecked);
}
el if (lectedCount > 0 && lectedCount < childCount)    {
//部分选中状态
parent->tCheckState(0, Qt::PartiallyChecked);
}
el if (lectedCount == childCount)
{
//选中状态
parent->tCheckState(0, Qt::Checked);
}
}
实现效果如下图:
得到选中的项⽬及状态代码:
QTreeWidgetItemIterator it(ui->treeMain);
while (*it) {
if((*it)->checkState(0)==Qt::Checked){
QMessageBox::information(this,"title",(*it)->text(0));  //得到选中列内容              ui->treeMain->tCurrentItem(*it); //设置为当前⾏
break;
}巴黎地铁线路图
++it;
}
备注:实战⽰例,解疑答惑。
--不间端地思考,实时地批判你的⼯作!

本文发布于:2023-07-18 22:23:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1086919.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:勾选   选中   状态   复选框
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图