resizeRowsByContents

В Qt метод resizeRowsByContents устанавливает высоту строки индивидуально в соответствии с содержанием контента в ее ячейках.

Мы устанавливаем только высоту секций строки по размеру фонта ячейки и параметру, который указывает во сколько строчек делать wrap текста для каждой ячейки.

Таким образом в нашем случае не происходит обход всех ячеек таблицы. То есть у нас своя лайт версия.

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

При этом resizeRowsToContents() учитывает qss стили (например min-height, height). Но вот проблема в том например, что штатно отрисовка после select не учитывает qss стили и получается надо дополнительно вызывать resizeRowsToContents() после select (Qt4.8.1 например). А это как минимум двойная отрисовка.

Штатно можно один раз вызвать при создании класс QTableView метод setDefaultSectionSize (24) для вертикального хэдера и это нормально сработает, то есть после select высота строк всех станет 24px. И если включен wrap и если высота ячейки больше 2 высот фонта ячейки, то длинный текст начнет переносится в ячейке на вторую как бы строку.

Наш вариант

В нашем случае с resizeRowsToContents() мы опять упрощаем задачу и вычисляем высоту строк (у нас все строки будут по высоте одинаковыми) по данным горизонтального хэдера, шаблон которого знает высоту каждой секции на основании размера ее фонта и параметра количество переносов (в секции), то есть количество wrap-ов, которое мы храним для каждой секции.