在主函数中增加:
init(); connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*, int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));
函数实现:
void Widget::init() { ui->treeWidget->setHeaderLabels(QStringList()<<"123"<<"234");//设置列名 ui->treeWidget->clear(); QTreeWidgetItem* group1=new QTreeWidgetItem(ui->treeWidget); group1->setText(0,"group1"); group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); group1->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem11=new QTreeWidgetItem(group1); subItem11->setText(0,"subItem11"); subItem11->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem11->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem12=new QTreeWidgetItem(group1); subItem12->setText(0,"subItem12"); subItem12->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem12->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem13=new QTreeWidgetItem(group1); subItem13->setText(0,"subItem13"); subItem13->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem13->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem14=new QTreeWidgetItem(group1); subItem14->setText(0,"subItem14"); subItem14->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem14->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* group2=new QTreeWidgetItem(ui->treeWidget); group2->setText(0,"group2"); group2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); group2->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem21=new QTreeWidgetItem(group2); subItem21->setText(0,"subItem21"); subItem21->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem21->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem22=new QTreeWidgetItem(group2); subItem22->setText(0,"subItem22"); subItem22->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem22->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem23=new QTreeWidgetItem(group2); subItem23->setText(0,"subItem23"); subItem23->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem23->setCheckState(0,Qt::Unchecked); QTreeWidgetItem* subItem24=new QTreeWidgetItem(group2); subItem24->setText(0,"subItem24"); subItem24->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable); subItem24->setCheckState(0,Qt::Unchecked); } void Widget::updateParentItem(QTreeWidgetItem *item) { QTreeWidgetItem* parent=item->parent(); if(parent==NULL) { return; } int selectedCount=0; int childCount=parent->childCount(); for(int i=0;i<childCount;i++) { QTreeWidgetItem* childItem=parent->child(i); if(childItem->checkState(0)==Qt::Checked) { selectedCount++; } } if(selectedCount<=0) { parent->setCheckState(0,Qt::Unchecked); } else if(selectedCount>0&&selectedCount<childCount) { parent->setCheckState(0,Qt::PartiallyChecked); } else if(selectedCount==childCount) { parent->setCheckState(0,Qt::Checked); } } void Widget::treeItemChanged(QTreeWidgetItem *item, int column) { //QString itemText=item->text(0); if(Qt::Checked==item->checkState(0)) { //QTreeWidgetItem* parent=item->parent(); int count=item->childCount(); if(count>0) { for(int i=0;i<count;i++) { item->child(i)->setCheckState(0,Qt::Checked); } } else { updateParentItem(item); } } else if(Qt::Unchecked==item->checkState(0)) { int count=item->childCount(); if(count>0) { for(int i=0;i<count;i++) { item->child(i)->setCheckState(0,Qt::Unchecked); } } else { updateParentItem(item); } } }