马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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);
- }
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |