Я нашел этот вопрос и этот вопрос.
Я также искал в другом месте.
Ситуация такова, что (начиная со свернутыми всеми дочерними элементами корня) мой код перебирает дерево, расширяя родителей тех элементов, чьи данные соответствуют определенному критерию.
Я просто хочу найти общее количество отображаемых строк, отображаемых в QTreeView
в конце этого процесса. NB Я использую слово «показ», а не «видимый», так как это не вопрос о окнах просмотра: я хочу, чтобы общее число показывалось, предполагая, что окно просмотра достаточно велико, чтобы не создавать вертикальную полосу прокрутки.
Неужели нет простого способа добиться этого? Подсчет общего количества дочерних элементов, отображаемых, например, путем подсчета всех дочерних элементов всех родителей, которые расширяются таким образом, по мере их расширения, будет довольно сложным: иногда, например, два родственных элемента соответствуют критерию, поэтому первый расширяет своего родителя. , а второй явно нет. Мало того, узел, расположенный глубоко в дереве, расширяет не только своего родителя, но (при необходимости) своего прародителя, прапрародителя и т. д.
Ввиду сложности вышеизложенного другой возможностью было бы выполнить итерацию по дереву очередной раз после расширения, чтобы подсчитать отображаемые строки. Это кажется нелепым усилием получить такую простую информацию.
Обратите внимание, что я говорю о QTreeViews
, а не QTableView
s. С последним кажется, что можно использовать table_view.verticalHeader().count()
. Но у QTreeView
нет метода verticalHeader
.
Ты прав. Я заметил это, но не очень внимательно изучил, потому что, как указано в комментарии, начало с tv.rect()
имеет несколько проблем. Но надо было посмотреть повнимательнее. Версия Musicamante яснее.
Решение уже дано в один из ответов для второго вопроса, на который вы ссылаетесь. Единственное отличие состоит в том, что начальный индекс должен быть просто первым доступным: т. е.
tree.model().index(0, 0, tree.rootIndex())
.