Переопределение sizeHintForColumn () для resizeColumnsToContents () над всеми ячейками (не только показанными) в QTableView - PullRequest
2 голосов
/ 20 июня 2011

Я занимаюсь разработкой приложения PyQt с QTableWidget, который может потенциально использоваться для отображения большого количества строк. Мне бы хотелось, чтобы ширина каждого столбца определялась максимальной шириной элемента всего столбца, а не только самым большим элементом, который отображается в момент программного добавления данных ячеек в виджет таблицы.

В Qt docs в описании метода resizeColumnToContents () указано, что

Изменяются только видимые столбцы. Переопределение sizeHintForColumn () в изменить размер скрытых столбцов.

Вопрос в том, как именно я должен сделать это правильно? К сожалению, у меня нет реального опыта работы с PyQt, и я не смог найти никаких источников этого метода, чтобы дать мне какие-либо указания о том, как мне это сделать.

И возможно ли изменить размер в зависимости от текущего содержимого, отображаемого в данный момент, то есть изменить размер после любых событий paintEvents, полученных виджетом таблицы?

1 Ответ

6 голосов
/ 20 июня 2011

Вам просто нужно создать подкласс QTableWidget и переопределить метод sizeHintForColumn, возвращая целое число, которое описывает ширину в пикселях, которую вы хотите.Вы можете вычислить ширину, используя width метод QFontMetrics для самой длинной строки.

class MyTable(QtGui.QTableWidget):

    def sizeHintForColumn(self, column):

        fm = self.fontMetrics()
        max_width = 0

        for i in range(self.rowCount()):

            width = fm.width(self.item(i,column).text()) + 10
            if  width > max_width:
                max_width = width

        return max_width

Если вы собираетесь много добавлять элементы и вызывать resizeColumnToContents после этого вы, вероятно, захотите как-то сохранить результат.Таким образом, вам не придется каждый раз перебирать все строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...