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;
}
备注:实战⽰例,解疑答惑。
--不间端地思考,实时地批判你的⼯作!