Изменение высоты и ширины ячеек., QTableView |
Здравствуйте, гость ( Вход | Регистрация )
Изменение высоты и ширины ячеек., QTableView |
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 |
Оба варианта слишком медлительны. Как можно ускорить этот процес? скорее всего это связано с перерисовкой, попробуй обернуть большие изменения в setUpdatesEnabled(...) |
|
|
BRE |
14.3.2009, 19:05
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Есть табличка с 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, но этот метод даже не вызывается. Нашел решение это й же проблеммы, но все равно не работает. Вот описание решения: http://lists.trolltech.com/qt-interest/200...ead01062-0.html Пробую пример не пашет. Что я делаю не так? Уж очень хочется найти ответ Вот исходник.
Прикрепленные файлы
|
|
|
BRE |
14.3.2009, 21:19
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Stanislaus |
14.3.2009, 21:59
Сообщение
#6
|
Студент Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: 0 |
Нужно переопределить класс модели, которую ты используешь в QTableView. А именно, переопределить метод QAbstractItemModel::data(), для роли 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 |
Поглядим. 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 |
|
|
|
Текстовая версия | Сейчас: 3.12.2024, 9:35 |