【QT】如何在遍历QTreeWidgetItem的子项过程中正确删除子项
目录
- 1、遍历QTreeWidgetItem子项的方法
- 2、遍历过程中删除子项
- 2.2 正向遍历移除
- 2.3 反向遍历移除
1、遍历QTreeWidgetItem子项的方法
遍历QTreeWidgetItem
的子项,最直接的方法就是使用QTreeWidgetItem
的以下两个函数:
//返回子项数。
int QTreeWidgetItem::childCount() const;
//返回指定索引的子项。子项的索引从0开始。
QTreeWidgetItem *QTreeWidgetItem::child(int index) const;
示例如下:
for (int i = 0; i < parentItem->childCount(); i++) {
QTreeWidgetItem* childItem = parentItem->child(i);
qDebug()<<childItem->text(0);
}
2、遍历过程中删除子项
删除QTreeWidgetItem
的子项可以使用以下函数:
/*
* 移除指定索引的子项。
* 注:使用该函数,子项只是从QTreeWidgetItem的子项列表里移出,
* 子项本身并没有释放,所以最后往往还要delete一下。
*/
QTreeWidgetItem *QTreeWidgetItem::takeChild(int index);
在遍历QTreeWidgetItem
子项过程中删除子项需要注意的就以下两点:
- 在删除子项后,
QTreeWidgetItem
的子项总数发生了变化。 - 在删除子项后,下一个子项的索引的索引可能发生遍历。
常用的遍历QTreeWidgetItem
移除的方式有两种:正向遍历移除、反向遍历移除。
2.2 正向遍历移除
从第一个子项开始,依次向后遍历并判断是否移除。由于移除操作可能会影响后续子项的索引,需要小心处理索引的变化。示例如下:
void removeItemsForward(QTreeWidgetItem* parentItem, const QString& targetText) {
int childCount = parentItem->childCount();
// 从第一个子项开始遍历
for (int i = 0; i < childCount; ++i) {
QTreeWidgetItem* childItem = parentItem->child(i);
// 判断当前子项的文本是否与目标文本匹配
if (childItem->text(0) == targetText) {
// 找到匹配的节点,从父节点中移除
delete parentItem->takeChild(i);
// 由于移除了一个子项,需要将索引减1,避免漏判
--i;
// 更新子项数量,因为已经移除了一个子项
childCount = parentItem->childCount();
}
}
}
2.3 反向遍历移除
从最后一个子项开始,向前遍历并判断是否移除。这样可以避免正向遍历中移除子项后索引变化带来的复杂处理,因为移除后面的子项不会影响前面子项的索引。
void removeItemsBackward(QTreeWidgetItem* parentItem, const QString& targetText) {
// 从最后一个子项开始遍历
for (int i = parentItem->childCount() - 1; i >= 0; --i) {
QTreeWidgetItem* childItem = parentItem->child(i);
// 判断当前子项的文本是否与目标文本匹配
if (childItem->text(0) == targetText) {
// 找到匹配的节点,从父节点中移除
delete parentItem->takeChild(i);
}
}
}
原文地址:https://blog.csdn.net/yanzhyan/article/details/145054368
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/505477.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/505477.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!