You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QTreeView的第1/2/3列实现可展开项(非第0列)

QTreeView多列结构下子项显示的优化实现

QTreeView的展开/折叠逻辑绑定在第0列的项上——只有第0列的QStandardItem作为父节点时,其下的子项才会被正确渲染显示。你之前的问题出在把非第0列的项当作父节点追加子项,自然看不到子内容。

下面是针对你的嵌套字典结构优化后的填充逻辑,既能实现首列为空的行结构,又能保证子项正常显示:

def fillWellTree(self, parent, dico):
    if isinstance(dico, dict):
        for key, value in dico.items():
            if isinstance(value, dict):
                # 字典层级:直接用key作为第0列节点,递归填充子内容
                item = QStandardItem(str(key))
                parent.appendRow(item)
                self.fillWellTree(item, value)
            elif isinstance(value, list):
                # 列表层级:创建第0列空项作为父容器,第二列展示key
                empty_parent = QStandardItem("")
                key_item = QStandardItem(str(key))
                # 插入整行(空容器+内容项)
                parent.appendRow([empty_parent, key_item])
                # 所有子项都追加到第0列的空容器上
                for val in value:
                    child_item = QStandardItem(val)
                    empty_parent.appendRow(child_item)

优化点说明

  • 把需要承载子项的父节点固定在第0列,完全符合QTreeView的渲染逻辑
  • 拆分"父容器"和"显示内容"的职责:空项负责管理子节点,其他列项只负责展示数据,结构清晰
  • 扩展性强:后续如果需要增加更多列,只需在appendRow的列表中添加对应列的QStandardItem即可

内容的提问来源于stack exchange,提问作者Eric Bayard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 08:27:41