PyQt5 QTreeView 在检查 child 节点时自动折叠
PyQt5 QTreeView auto collapses on checking a child node
我在 PyQt5 中有一个 QTreeView
,带有可检查的 parent 和 child 节点。我可以扩展 parent 节点并回调 selecting/deselecting parent 节点上的 select/deselect 所有 child 节点。这种行为很好。
但是当我 deselect 或 select 任何 child 节点时,默认情况下整个树会折叠(右图)。理想情况下,我希望树在 child 节点被 selected 或 deselected 时保持它所处的状态。 QTreeView
是否有一个标志可以覆盖并且没有折叠所有 child 节点的默认行为?
我目前的尝试:
每当单击 child 节点时,我都会跟踪 parent 项的 QModelIndex
,然后调用 QTreeView
object 上的 expand
函数以此 parent 项的 QModelIndex
作为参数。但这似乎并不能阻止上述行为。但是,expandAll
函数似乎工作正常。但这有扩大其他 parent 不感兴趣的 children 的缺点。如果那是他们的状态,我宁愿让他们倒塌。
有人有意见吗?
诀窍是使用模型的索引而不是项目的索引来跟踪所有父节点的展开状态。
model.index(item.index().row(), 0)
而不是
item.index()
我在 PyQt5 中有一个 QTreeView
,带有可检查的 parent 和 child 节点。我可以扩展 parent 节点并回调 selecting/deselecting parent 节点上的 select/deselect 所有 child 节点。这种行为很好。
但是当我 deselect 或 select 任何 child 节点时,默认情况下整个树会折叠(右图)。理想情况下,我希望树在 child 节点被 selected 或 deselected 时保持它所处的状态。 QTreeView
是否有一个标志可以覆盖并且没有折叠所有 child 节点的默认行为?
我目前的尝试:
每当单击 child 节点时,我都会跟踪 parent 项的 QModelIndex
,然后调用 QTreeView
object 上的 expand
函数以此 parent 项的 QModelIndex
作为参数。但这似乎并不能阻止上述行为。但是,expandAll
函数似乎工作正常。但这有扩大其他 parent 不感兴趣的 children 的缺点。如果那是他们的状态,我宁愿让他们倒塌。
有人有意见吗?
诀窍是使用模型的索引而不是项目的索引来跟踪所有父节点的展开状态。
model.index(item.index().row(), 0)
而不是
item.index()