Название: Как ускорить отображение QSqlQueryModel Отправлено: Yegor от Июль 25, 2012, 12:17 Здравствуйте!
Есть модель QSqlQueryModel. Она отображается в QTableView. Если сделать, чтобы QSqlQueryModel заполнилась большим количеством данных, например пол миллиона строк, и отобразить ее в QTableView, то QTableView будет сильно тормозить при прокрутке. Чем ниже таблицу в представлении прокручивать, то тем сильнее представление будет тормозить. Подскажите, пожалуйста, как ускорить этот процесс, чтобы не тормозило. Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: Пантер от Июль 25, 2012, 12:20 Ты уверен, что тебе нужно столько данных в таблице?
Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: Yegor от Июль 25, 2012, 12:27 Да, уверен. Может быть и большее количество данных - миллионы.
Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: Странник от Июль 25, 2012, 13:06 Да, уверен. Может быть и большее количество данных - миллионы. и зачем? кто реально с этими миллионами строк работать будет, тем более вниз прокручивать это все?Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: CuteBunny от Июль 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. Кстати, заметил, интересную вещь, может опять показалось, но если допустим есть модель и мы что-то в базе поменяли, когда мы делаем прокрутку вьюхи, то у нас будут показываться новые обновленные данные. Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: RVZ от Июль 25, 2012, 14:20 Да, уверен. Может быть и большее количество данных - миллионы. и зачем? кто реально с этими миллионами строк работать будет, тем более вниз прокручивать это все? P.S. ни кто не будет внимательно просматривать строчки если из больше 100-150 проверено (пользователи будут касячить)!!! Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: CMorgan от Июль 25, 2012, 15:11 Мне тут подкинули поддержку одной CRM. Так вот, у них во вьюхе отображается заданное в настройке количество записей (они рекомендуют 40, но можно и больше/меньше поставить, это кому как удобно). В пределах этих 40 записей можешь скролить туда сюда, для перехода на следующие или предыдущие 40 записей юзаются кнопочки интерфейса со стрелками влево, вправо (расположенные под гридом).
Попробуй так реализовать интерфейс. Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: Bepec от Июль 25, 2012, 15:21 Это уже немного неприятно пользователю( колена до 12 проклянут 100%).
Проще +-50 считывать. Название: Re: Как ускорить отображение QSqlQueryModel Отправлено: Alex_C от Июль 25, 2012, 16:40 Да, но ведь все это давно уже сделано в MS Access - в дельфи при открытии таблицы задаешь, где ее значения будут храниться - на сервере или у клиента. Если задаешь - на сервере - то как раз подгружается только несколько сотен записей. Работает очень быстро. При скроллинге немного подтормаживает - но не страшно.
По ходу нужно сделать как мне fte в соседней ветке советовал: Цитировать можно например так - setQuery("select * testtable order by ...... limit кол_во_строк offset строка_номер" естественно "кол_во_строк" и "строка_номер" модель должна сама определять.... вопрос в малом - как это организовать. :) |