Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
Antrix |
14.3.2009, 18:38
Сообщение
#1
|
|
Студент ![]() Группа: Новичок Сообщений: 18 Регистрация: 25.9.2008 Пользователь №: 300 Спасибо сказали: 4 раз(а) Репутация: 0
|
Есть табличка с 2 столбцами и 64к строк. Нужно задать высоту ячеек, например, на 17, ширину на 34.
Пробывал делать так: QTableView* t = new QTableView(); t->resizeColumnsToContents(); //или так: for (int i = 0; i < N; i++) //N = 64000 t->horizontalHeader()->resizeSection(i, 17); Оба варианта слишком медлительны. Как можно ускорить этот процес? Текс во всех ячейках одинаковой длины - 4 символа. |
|
|
|
|
Litkevich Yuriy |
14.3.2009, 19:04
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Antrix @ 14.3.2009, 21:38) Link Оба варианта слишком медлительны. Как можно ускорить этот процес? скорее всего это связано с перерисовкой, попробуй обернуть большие изменения в Link |
|
|
|
|
BRE |
14.3.2009, 19:05
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(Antrix @ 14.3.2009, 18:38) Link Есть табличка с 2 столбцами и 64к строк. Нужно задать высоту ячеек, например, на 17, ширину на 34. Пробывал делать так: QTableView* t = new QTableView(); t->resizeColumnsToContents(); //или так: for (int i = 0; i < N; i++) //N = 64000 t->horizontalHeader()->resizeSection(i, 17); Оба варианта слишком медлительны. Как можно ускорить этот процес? Текс во всех ячейках одинаковой длины - 4 символа. Сделай и установи своего делегата, у которого переопредели sizeHint. |
|
|
|
|
Antrix |
14.3.2009, 21:18
Сообщение
#4
|
|
Студент ![]() Группа: Новичок Сообщений: 18 Регистрация: 25.9.2008 Пользователь №: 300 Спасибо сказали: 4 раз(а) Репутация: 0
|
setUpdatesEnabled(...) - непомогло.
Решил проблемму так: QTableView* t = new QTableView(); t->horizontalHeader()->setDefaultSectionSize(34); t->verticalHeader()->setDefaultSectionSize(17); Пробыл сделать как предложил BRE. Не получилось. Переопределил sizeHint, но этот метод даже не вызывается. Нашел решение это й же проблеммы, но все равно не работает. Вот описание решения: Link Пробую пример не пашет. Что я делаю не так? Уж очень хочется найти ответ Вот исходник.
Прикрепленные файлы
|
|
|
|
|
BRE |
14.3.2009, 21:19
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(Antrix @ 14.3.2009, 21:14) Link Что я делаю не так? Уж очень хочется найти ответ Поглядим. Сообщение отредактировал BRE - 14.3.2009, 21:19 |
|
|
|
|
Stanislaus |
14.3.2009, 21:59
Сообщение
#6
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: 0
|
Нужно переопределить класс модели, которую ты используешь в QTableView. А именно, переопределить метод Link, для роли Qt::SizeHint. Так же можно попробовать воспользоваться setData(), но не думаю, что этот вариан будет очень быстрым.
После популяции view, нужно выполнить view->resizeRowsToContents() и view->resizeColumnsToContents(), чтобы был учтен size hint. Где-то тут в статьях был очень хороший мануал, как эффективно использовать Model/View фреймворк. Не могу найти, к сожалению. |
|
|
|
|
BRE |
14.3.2009, 22:18
Сообщение
#7
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(BRE @ 14.3.2009, 21:19) Link Поглядим. main.cpp |
|
|
|
|
Antrix |
15.3.2009, 14:57
Сообщение
#8
|
|
Студент ![]() Группа: Новичок Сообщений: 18 Регистрация: 25.9.2008 Пользователь №: 300 Спасибо сказали: 4 раз(а) Репутация: 0
|
BRE спасибо за пример
По всей видимости, единственый путь, делать так. QTableView* t = new QTableView(); t->horizontalHeader()->setDefaultSectionSize(34); t->verticalHeader()->setDefaultSectionSize(17); Работает многновенно. |
|
|
|
| Гость_anonymous_* |
15.3.2009, 15:26
Сообщение
#9
|
|
Гости |
Околотемный вопрос, скажите а можно ли сделать так чтобы в ячейке QTableWidget можно было помещать многострочный текст??
Или чтобы он хотя бы отображался таковым?? |
|
|
|
|
BRE |
15.3.2009, 15:40
Сообщение
#10
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(anonymous @ 15.3.2009, 15:26) Link Околотемный вопрос, скажите а можно ли сделать так чтобы в ячейке QTableWidget можно было помещать многострочный текст?? Или чтобы он хотя бы отображался таковым?? Делегаты наше Фсе! Переопределяй paint и рисуй хоть по диагонале. |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 23.12.2025, 16:35 |