Russian Qt Forum
Ноябрь 23, 2024, 23:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QSqlTableModel тормозит когда включен сортинг  (Прочитано 9015 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« : Март 05, 2011, 03:01 »

Собсно сабж.
Есть таблица 20000*16 полей. Очень сильно тормозит fetchMore. Зафетчить всю таблицу не получается.
Кроме того, сильно тормозит при использовании ползунка скролла, видимо связано с тем, что скроллится оно плавно и data() вызывается на все промежуточные стейты.
Записан
Kolobok
Гость
« Ответ #1 : Март 05, 2011, 12:10 »

Поле, по которому сортируется, индексировано?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Март 05, 2011, 12:36 »

Не. Поможет?)
Записан
Kolobok
Гость
« Ответ #3 : Март 05, 2011, 13:14 »

Должно помочь.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Март 05, 2011, 15:26 »

Не помогло. Вроде сортировка стала быстрее, но тем не менее лаги при скролле и фетче остались такие же. Есть идея что тормозит именно data() при выборе из базы. Что делать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Март 05, 2011, 15:34 »

А тормозит постоянно или пока данные не подтянет?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Март 05, 2011, 15:40 »

Именно пока не подтянет данные. Но вот как их подтягивать? (пробовал scrollToBottom - спасает, но до пересортировки:))
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Март 05, 2011, 15:51 »

Улыбающийся
Код
C++ (Qt)
while (model->canFetchMore ()) {
 model->fetchMore ();
}
 
Это делаешь после селекта и будет тебе счастье.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Март 05, 2011, 17:12 »

Нет не делает. Она не грузит данные по фетчу, только количество записей во вью меняет (ползунок меняется)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Март 05, 2011, 17:18 »

Хм. Странно. У меня работало.
Тогда пиши свою модель.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Март 05, 2011, 18:02 »

И чо я там сделаю?)
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #11 : Март 05, 2011, 19:44 »

Проблема же в том, что тупит именно вьюха, когда забирает данные.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #12 : Март 06, 2011, 02:05 »

Хм, заюзал тейбл вью вместо три вью, все летать стало:) фетч за 0.2 сек делается
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #13 : Март 10, 2011, 11:40 »

Так, ну ладно, еще куча мега вопросов от меня. Можно ли сделать чтобы при сорте сохранялось выделение? (модель-то перестраивается, айайай). Ну и еще мега вопрос - 0.2 сек - это нормально или можно улучшить? (если хранить все данные в памяти и тупо делать тейблмодель по этой памяти, то сортируется мгновенно (при помощи QSortFilterProxyModel))
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #14 : Март 10, 2011, 16:18 »

Цитировать
Можно ли сделать чтобы при сорте сохранялось выделение? (модель-то перестраивается, айайай)
Да вроде всё просто)
Перегружаешь Q*Model::sort(), перед вызовом базового sort() запоминаешь QAbstractItemView::currentIndex(), после восстанавливаешь.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.234 секунд. Запросов: 23.