在QT中获取QTreeWidget控件下所有有勾选复选框的子节点,并把有父节点的和没有父节点的分类,请给我完整代码
时间: 2024-02-11 10:09:59 浏览: 159
好的,以下是完整的代码:
```c++
// 获取所有有勾选复选框的子节点,并分类
void getAllCheckedNodes(QTreeWidgetItem* item, QList<QTreeWidgetItem*>& checkedItems, QList<QTreeWidgetItem*>& checkedRootItems) {
if (item->checkState(0) == Qt::Checked) {
checkedItems.append(item);
if (item->parent()) {
// 有父节点的子节点
checkedItems.removeOne(item);
} else {
// 没有父节点的子节点
checkedRootItems.append(item);
}
}
for (int i = 0; i < item->childCount(); i++) {
getAllCheckedNodes(item->child(i), checkedItems, checkedRootItems);
}
}
// 示例代码,在某个按钮的槽函数中调用
void MainWindow::on_btnGetCheckedNodes_clicked() {
QList<QTreeWidgetItem*> checkedItems;
QList<QTreeWidgetItem*> checkedRootItems;
QTreeWidgetItemIterator it(ui->treeWidget);
while (*it) {
getAllCheckedNodes(*it, checkedItems, checkedRootItems);
++it;
}
// 输出结果
qDebug() << "有父节点的子节点:";
foreach(QTreeWidgetItem* item, checkedItems) {
qDebug() << item->text(0);
}
qDebug() << "没有父节点的子节点:";
foreach(QTreeWidgetItem* item, checkedRootItems) {
qDebug() << item->text(0);
}
}
```
以上代码中,`getAllCheckedNodes()` 函数是递归实现的,用来获取所有有勾选复选框的子节点,并按照是否有父节点分类。`on_btnGetCheckedNodes_clicked()` 函数是一个示例代码,可以在某个按钮的槽函数中调用,用来输出结果。
阅读全文