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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как ускорить отображение QSqlQueryModel  (Прочитано 6715 раз)
Yegor
Гость
« : Июль 25, 2012, 12:17 »

Здравствуйте!

Есть модель QSqlQueryModel. Она отображается в QTableView.
Если сделать, чтобы QSqlQueryModel заполнилась большим количеством данных, например пол миллиона строк, и отобразить ее в QTableView, то QTableView будет сильно тормозить при прокрутке. Чем ниже таблицу в представлении прокручивать, то тем сильнее представление будет тормозить.

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Июль 25, 2012, 12:20 »

Ты уверен, что тебе нужно столько данных в таблице?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Yegor
Гость
« Ответ #2 : Июль 25, 2012, 12:27 »

Да, уверен. Может быть и большее количество данных - миллионы.
Записан
Странник
Гость
« Ответ #3 : Июль 25, 2012, 13:06 »

Да, уверен. Может быть и большее количество данных - миллионы.
и зачем? кто реально с этими миллионами строк работать будет, тем более вниз прокручивать это все?
Записан
CuteBunny
Гость
« Ответ #4 : Июль 25, 2012, 14:13 »

Как работает QSqlQueryModel + QTableView:

QSqlQueryModel не сразу отдает все n-кол-во записей в результате, для этого у QSqlQueryModel есть методы fetchMore, canFetchMore, которые вызываются, когда Вы двигаете scroll у вьюхи, поэтому подтормаживает.

Цитировать
When you have large - or perhaps even infinite - data sets, you will need to add items to the model in batches, and preferably only when the items are needed by the view (i.e., when they are visible in the view).

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

Кстати, заметил, интересную вещь, может опять показалось, но если допустим есть модель и мы что-то в базе поменяли, когда мы делаем прокрутку вьюхи, то у нас будут показываться новые обновленные данные.
Записан
RVZ
Гость
« Ответ #5 : Июль 25, 2012, 14:20 »

Да, уверен. Может быть и большее количество данных - миллионы.
и зачем? кто реально с этими миллионами строк работать будет, тем более вниз прокручива
ть это все?
Он просто хочет быть проклятым до 13ого колена... (а то может и больше) тоже цель вполне приличная и вполне достойная (так не каждый сможет) ... хотя может быть предложения WHERE использовать религия запрещает (концепция хакера XX века - информация должна быть открыта... в данном случае обратно пропорционально мастерству - вся и сразу)

P.S. ни кто не будет внимательно просматривать строчки если из больше 100-150 проверено (пользователи будут касячить)!!!
« Последнее редактирование: Июль 25, 2012, 14:29 от RVZ » Записан
CMorgan
Гость
« Ответ #6 : Июль 25, 2012, 15:11 »

Мне тут подкинули поддержку одной CRM. Так вот, у них во вьюхе отображается заданное в настройке количество записей (они рекомендуют 40, но можно и больше/меньше поставить, это кому как удобно). В пределах этих 40 записей можешь скролить туда сюда, для перехода на следующие или предыдущие 40 записей юзаются кнопочки интерфейса со стрелками влево, вправо (расположенные под гридом).
Попробуй так реализовать интерфейс.     
Записан
Bepec
Гость
« Ответ #7 : Июль 25, 2012, 15:21 »

Это уже немного неприятно пользователю( колена до 12 проклянут 100%).
Проще +-50 считывать.
Записан
Alex_C
Гость
« Ответ #8 : Июль 25, 2012, 16:40 »

Да, но ведь все это давно уже сделано в MS Access - в дельфи при открытии таблицы задаешь, где ее значения будут храниться - на сервере или у клиента. Если задаешь - на сервере - то как раз подгружается только несколько сотен записей. Работает очень быстро. При скроллинге немного подтормаживает - но не страшно.
По ходу нужно сделать как мне fte в соседней ветке советовал:

Цитировать
можно например так - setQuery("select * testtable order by ...... limit кол_во_строк offset строка_номер"
естественно "кол_во_строк" и "строка_номер" модель должна сама определять....

вопрос в малом - как это организовать. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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