计数显示(可见)行的 QTreeView

Count showing (visible) rows of a QTreeView

我找到了 and this question

我也在别处搜索过。

情况是(从所有根项 children 折叠开始)我的代码遍历树,扩展数据符合特定条件的那些项的 parents。

我只想找到在该过程结束时 QTreeView 中显示的显示行总数。注意我使用“显示”而不是“可见”这个词,因为这不是关于视口的问题:我希望显示的总数假设视口足够大而不必创建垂直滚动条。

真的没有简单的方法可以实现吗?计算显示的总数 children,例如,计算以这种方式扩展的所有 parent 中的所有 children,随着它们的扩展,将非常复杂:有时,例如, 两个兄弟姐妹符合条件,所以第一个扩展了它的 parent,但第二个显然没有。不仅如此,位于树深处的节点不仅扩展了它自己的 parent,而且(如果需要)扩展了它的 grandparent、great-grandparent 等

鉴于上述情况的复杂性,另一种可能是在扩展后再次遍历树,以计算显示的行数。为了获得如此简单的信息,这似乎是一种荒谬的努力。

请注意,我说的是 QTreeViews,而不是 QTableView。对于后者,似乎可以使用 table_view.verticalHeader().count()。但是 QTreeView 没有方法 verticalHeader.

QTreeView提供了indexAbove() and indexBelow()个功能,后者:

Returns the model index of the item below index.

    def count_showing_rows(self):
        count = 0
        index = self.model().index(0, 0)
        while index.isValid():
            count += 1
            index = self.indexBelow(index)
        return count