方法封装和connect(ui.treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(treeItemChanged(QTreeWidgetItem*, int)));
void initQTreeWidgetItem(QTreeWidgetItem *item, QString str, Qt::ItemFlags flags = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable, Qt::CheckState state = Qt::Unchecked, int column = 0){ item->setText(column, str); item->setFlags(flags); item->setCheckState(column, state);}void updateChildItem(QTreeWidgetItem *item, int column, Qt::CheckState state){ int count = item->childCount(); if (count > 0) { for (int i = 0; i < count; i++) { //判断是否有孩子当bb,如果当bb就递归。 auto childitem = item->child(i); if (childitem!=nullptr) { updateChildItem(childitem, column, state); } item->child(i)->setCheckState(column, state); } } }void updateParentItem(QTreeWidgetItem *item, int column, Qt::CheckState state){ QTreeWidgetItem *parent = item->parent(); QTreeWidgetItem *yeye(nullptr); if (parent == nullptr) { return; } int selectedCount = 0; int partCount = 0; int chiildCount = parent->childCount(); for (int i = 0; i < chiildCount; i++) { QTreeWidgetItem *childItem = parent->child(i); if (childItem->checkState(column) == Qt::Checked ) { selectedCount++; } if (childItem->checkState(column) == Qt::PartiallyChecked) { partCount++; } } if (selectedCount <= 0 && partCount<=0) { parent->setCheckState(column, Qt::Unchecked); } else if (selectedCount > 0 && selectedCount < chiildCount) { parent->setCheckState(column, Qt::PartiallyChecked); yeye = parent->parent(); while (yeye!=nullptr) { yeye->setCheckState(column, Qt::PartiallyChecked); yeye = yeye->parent(); } } else if (selectedCount == chiildCount) { parent->setCheckState(column, Qt::Checked); }}void treeItemChanged(QTreeWidgetItem *item, int column){ if (Qt::Checked == item->checkState(column)) { updateChildItem(item, column, Qt::Checked); updateParentItem(item, column, Qt::Checked); } else if (Qt::Unchecked == item->checkState(column)) { updateChildItem(item, column, Qt::Unchecked); updateParentItem(item, column, Qt::Unchecked); }}
新闻热点
疑难解答