Размер, чтобы соответствовать строкам и столбцам в QTableView, очень медленный

У меня есть QTableView с пользовательской моделью, и он отлично работает. Однако, когда я запускаю программу, я хочу, чтобы размер строк и столбцов соответствовал размеру, потому что по умолчанию они занимают слишком много места. Я должен отметить, что в моей таблице 65 тысяч строк (всего 3 столбца), и они всегда одинаковы. Следующий код работает нормально, но очень медленно.

memorListView — это QTableView. До этой строки я setModel в свою пользовательскую модель

memoryListView->resizeRowsToContents();
memoryListView->resizeColumnsToContents();

Как я уже упоминал, это делает именно то, что мне нужно, но для запуска требуется около 8 секунд. Я полагаю, это потому, что все данные должны быть извлечены из модели, когда представление в остальном счастливо лениться запрашивать их.

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

Я надеюсь, что я просто делаю это наивно, и есть какой-то вариант, который я могу переключить, чтобы сделать это быстрее. Я знаю, что все строки и столбцы будут одного размера; могу ли я как-то сказать ему использовать этот намек?

Заранее спасибо.


person Robert    schedule 20.11.2011    source источник


Ответы (1)


Вы можете просто измерить ширину текста, используя QFontMetrics, а затем установить для него ширину столбца. Что-то вроде этого должно работать:

QFontMetrics fontMetrics(yourWidget->font());
int columnWidth = fontMetrics.width("some text");
person laurent    schedule 20.11.2011
comment
Хм, я попробую. Выглядит многообещающе. - person Robert; 20.11.2011