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

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

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

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

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

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

Сообщений: 5877


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


Просмотр профиля 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]   Вверх
  Печать  
 
Перейти в:  


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