Wei Zhongqin博客好记性不如烂笔头

PySide6/PyQt开发经验总结(1) - QTreeWidget折叠子项(折叠当前项的所有子项)

Wei Zhonqin·2022-07-22 10:40·1663 次阅读

PySide6/PyQt开发经验总结(1) - QTreeWidget折叠子项(折叠当前项的所有子项)

QTreeWidget折叠子项(折叠当前项的所有子项)

本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷。

[TOC]#

一、仅折叠子项#

首先 Qt 已经提供了QTreeWidgetItem.setExpanded(expand)函数,当expand为true,则展开该项,否则折叠该项;搭配上QTreeWidgetItem.isExpanded()函数使用,即可完成折叠子项。

Copy
# 获取到当前项 item = self.ui.treeWidget.currentItem() # 根据当前项状态,来设置展开或折叠 item.setExpanded(not item.isExpanded())

二、折叠当前项的所有子项#

不过,配合QTreeWidgetItemIterator以及参数HasChildren,便可实现折叠当前项的所有子项。

Copy
# 获取起始节点 item = self.ui.treeWidget.currentItem() # 存储当前项的状态 enable = item.isExpanded() # 从item开始迭代 配合参数HasChildren 仅迭代有子节点的节点 it = QTreeWidgetItemIterator(item, QTreeWidgetItemIterator.HasChildren) while it.value() != None: it.value().setExpanded(enable) it=it.__iadd__(1) # 是否是根节点 当前节点是否为空 if item.parent() != None and it.value() != None: # 如果当前节点的父节点和起始节点父节点一致时 则退出循环 if item.parent() == it.value().parent(): break

三、递归折叠当前项的所有子项#

因为当时QT6的文档都是靠机翻的,一时没找到这个迭代器,就想了用递归的方式,但是代码实现有点问题,然后又发现了迭代器这个东西,这代码就不研究了,希望有哪位大佬能指正一下。

该方法未成功实现递归折叠当前项的所有子项功能!

Copy
def treeWidget_itemExpanded_AllChildren(item,enable,flag_item): # 当前项有子项时 扫描它的子项是否还有 子子项 if item.childCount() > 0: for i in range(0, item.childCount()): item_c = item.child(i) # 如果有子子项 and 当前子项没折叠 就递归扫描 if item.childCount() > 0 and item_c.isExpanded(): item = item_c # 如果子项没有 子子项了 else: item.setExpanded(enable) if item.parent() == flag_item.parent(): return ; else: item = item.parent() treeWidget_itemExpanded_AllChildren(item, enable, flag_item)

posted @   风男很快乐  阅读(1663)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示
目录