日志
QtreeWidget实现父节点选中时子节点全部选中(三种状态)
2015-10-13 18:38
//纯手打 会有拼写错误 请谅解
Qtreewidget *tree =new Qtreewidget; //初始化一个控件 connect(tree, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this,SLOT(slottreeItemChanged(QTreeWidgetItem*, int)));//绑定信号 //选中项改变 void ShowJH_All::slottreeItemChanged(QTreeWidgetItem * item, int) { //如果当前项是选中状态 if(Qt::Checked == item->checkState(0)) { int count = item->childCount(); //如果当前选中项是父节点那么count > 0 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); } } } //选中或者取消选中子节点时的处理 void ShowJH_All::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 ShowJH_All::on_selectAllradio_clicked() { if(ui->tabWidget->currentIndex()==0) { QList<QCheckBox *> checkbox = ui->scrollArea->findChildren<QCheckBox *>(); for(int i = 0;i<checkbox.count();i++) { if(!checkbox.at(i)->isChecked()) { checkbox.at(i)->setChecked(true); } } } else { //遍历所有的节点 for(int i = 0;i<ui->treeWidget->topLevelItemCount();i++) { //得到当前的节点指针 QTreeWidgetItem *pLeve1 = ui->treeWidget->topLevelItem(i); for(int j = 0;j<pLeve1->childCount();j++) { QTreeWidgetItem *pLeve2 = pLeve1->child(j); //判断当前节点是否选中 if(Qt::Checked != pLeve2->checkState(0)) { pLeve2->setCheckState(0, Qt::Checked); } } } } } //反选 void ShowJH_All::on_UnselectAllRadio_clicked() { if(ui->tabWidget->currentIndex()==0) { QList<QCheckBox *> checkbox = ui->scrollArea->findChildren<QCheckBox *>(); for(int i = 0;i<checkbox.count();i++) { if(!checkbox.at(i)->isChecked()) { checkbox.at(i)->setChecked(true); } else { checkbox.at(i)->setChecked(false); } } } else { //遍历所有的节点 for(int i = 0;i<ui->treeWidget->topLevelItemCount();i++) { //得到当前的节点指针 QTreeWidgetItem *pLeve1 = ui->treeWidget->topLevelItem(i); for(int j = 0;j<pLeve1->childCount();j++) { QTreeWidgetItem *pLeve2 = pLeve1->child(j); //判断当前节点是否选中 if(Qt::Checked != pLeve2->checkState(0)) { pLeve2->setCheckState(0, Qt::Checked); } else { pLeve2->setCheckState(0, Qt::Unchecked); } } } } } |
上一篇: 无