connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));
void treeItemChanged(QTreeWidgetItem *item, int column) { if(item->childCount()) { for( int i = 0; i < item->childCount(); i++ ) { item->child(i)->setCheckState(0, item->checkState(0)); treeItemChanged(item->child(i), 0); //递归改变父节点下的子节点check state } } else { QTreeWidgetItem* parent = item->parent(); while(parent != NULL) { if(item->checkState(0) != parent->checkState(0)) { int ncheck = 0; for( int i = 0; i < parent->childCount(); i++ ) { if( parent->child(i)->checkState(0) == Qt::Checked ) { ++ncheck; //统计父节点下子节点勾选个数 } } if(ncheck == parent->childCount()) parent->setCheckState(0,Qt::Checked); else if(ncheck == 0) parent->setCheckState(0,Qt::Unchecked); else parent->setCheckState(0,Qt::PartiallyChecked); } parent = parent->parent(); } } }
本文介绍了一个Qt应用程序中实现树形控件(QTreeWidget)复选框状态同步的方法。当父节点的状态发生变化时,其所有子节点的状态会相应地更新;反之亦然。这种递归机制确保了树形结构中各节点状态的一致性。
318

被折叠的 条评论
为什么被折叠?



