QTreeWidget折疊子項(折疊當前項的所有子項)
本文僅供本人知識總結使用,所以內容會比較淺顯,不喜勿噴,
目錄- QTreeWidget折疊子項(折疊當前項的所有子項)
- 目錄
- 一、僅折疊子項
- 二、折疊當前項的所有子項
- 三、遞回折疊當前項的所有子項
- 目錄
- 一、僅折疊子項
- 二、折疊當前項的所有子項
- 三、遞回折疊當前項的所有子項
一、僅折疊子項
首先 Qt 已經提供了QTreeWidgetItem.setExpanded(expand)函式,當expand為true,則展開該項,否則折疊該項;搭配上QTreeWidgetItem.isExpanded()函式使用,即可完成折疊子項,
# 獲取到當前項
item = self.ui.treeWidget.currentItem()
# 根據當前項狀態,來設定展開或折疊
item.setExpanded(not item.isExpanded())
二、折疊當前項的所有子項
不過,配合QTreeWidgetItemIterator以及引數HasChildren,便可實作折疊當前項的所有子項,
# 獲取起始節點
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的檔案都是靠機翻的,一時沒找到這個迭代器,就想了用遞回的方式,但是代碼實作有點問題,然后又發現了迭代器這個東西,這代碼就不研究了,希望有哪位大佬能指正一下,
該方法未成功實作遞回折疊當前項的所有子項功能!
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500070.html
標籤:其他
下一篇:變頻器的四大組成部分和作業原理
