Подсчет отображаемых (видимых) строк QTreeView

Я нашел этот вопрос и этот вопрос.

Я также искал в другом месте.

Ситуация такова, что (начиная со свернутыми всеми дочерними элементами корня) мой код перебирает дерево, расширяя родителей тех элементов, чьи данные соответствуют определенному критерию.

Я просто хочу найти общее количество отображаемых строк, отображаемых в QTreeView в конце этого процесса. NB Я использую слово «показ», а не «видимый», так как это не вопрос о окнах просмотра: я хочу, чтобы общее число показывалось, предполагая, что окно просмотра достаточно велико, чтобы не создавать вертикальную полосу прокрутки.

Неужели нет простого способа добиться этого? Подсчет общего количества дочерних элементов, отображаемых, например, путем подсчета всех дочерних элементов всех родителей, которые расширяются таким образом, по мере их расширения, будет довольно сложным: иногда, например, два родственных элемента соответствуют критерию, поэтому первый расширяет своего родителя. , а второй явно нет. Мало того, узел, расположенный глубоко в дереве, расширяет не только своего родителя, но (при необходимости) своего прародителя, прапрародителя и т. д.

Ввиду сложности вышеизложенного другой возможностью было бы выполнить итерацию по дереву очередной раз после расширения, чтобы подсчитать отображаемые строки. Это кажется нелепым усилием получить такую ​​простую информацию.

Обратите внимание, что я говорю о QTreeViews, а не QTableViews. С последним кажется, что можно использовать table_view.verticalHeader().count(). Но у QTreeView нет метода verticalHeader.

Решение уже дано в один из ответов для второго вопроса, на который вы ссылаетесь. Единственное отличие состоит в том, что начальный индекс должен быть просто первым доступным: т. е. tree.model().index(0, 0, tree.rootIndex()).

ekhumoro 11.05.2022 19:24

Ты прав. Я заметил это, но не очень внимательно изучил, потому что, как указано в комментарии, начало с tv.rect() имеет несколько проблем. Но надо было посмотреть повнимательнее. Версия Musicamante яснее.

mike rodent 11.05.2022 20:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

QTreeView предоставляет функции indexAbove() и 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

Другие вопросы по теме