Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Cyrax от Января 14, 2008, 21:16



Название: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Cyrax от Января 14, 2008, 21:16
Как заставить представление считывать данные из модели для всех ячеек сразу и не дёргать модель при скроллинге. Т.е. за счёт большего расхода памяти.
Тормоза раздражают...


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Racheengel от Января 14, 2008, 21:20
Для этого надо свое представление делать, читать данные, кэшировать и отображать соответственно.


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Cyrax от Января 14, 2008, 22:22
Желательно бы стандартным обойтись. Может политику какую установить...


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Racheengel от Января 14, 2008, 23:28
стандартные представления и так работают достаточно быстро.

а может, проблема именно в модели? а не в представлении?


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Cyrax от Января 14, 2008, 23:50
У меня модель (посредством Manager'а) долго "запросы" представления выполняет. Вполне возможно, что можно заметно оптимизировать манипуляции модели с данными, но этой проблемы можно было бы избежать, если б проедставление сразу всё считало и хранило в памяти. Вначале пришлось бы чуть больше подождать (при загрузке всей таблицы), но зато потом не было бы тормозов...


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: pastor от Января 15, 2008, 00:42
А какой объем данных используется?


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Racheengel от Января 15, 2008, 01:37
я бы начал с модели...
ибо представлений может быть 100 вариантов, и прикручивать к каждому из них кэш, чтобы нивилировать тормоза модели имхо не есть гут...


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Alex03 от Января 15, 2008, 07:32
я бы начал с модели...
ибо представлений может быть 100 вариантов, и прикручивать к каждому из них кэш, чтобы нивилировать тормоза модели имхо не есть гут...
+1

Cyrax или модифицируй свою модельку, или напиши промежуточную, которая выгребает все денные из твоей и предоставляет их вьюхе(ам). А вьюха не то и вьюха, чтобы только отображать данные, иначе модели нафиг не нужны.


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Tonal от Января 15, 2008, 08:42
Какой объем данных?
Кешь я бы прикрутил к Manager-у (Racheengel вроде именно это имел в виду?)


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Racheengel от Января 15, 2008, 12:00
Именно. И просмотреть, какие сигналы эмитятся при обновлении, возможно, их надо бы отключить на этот период.


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: pastor от Января 15, 2008, 12:50
Какой объем данных?

Я хотел узнать у автора, какой объем данных хранит моделька (кол-во строк\столбцов), что возникают проблемы со скролом.

Я сейчас юзаю свою модель, к которая содержит 4 столбца и 640000 строок. Немалейшей задержки при скроле (Винда, Линукс).

По теме: имхо, проблема в моделе, а не во вьюхе


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: Deiv от Января 18, 2008, 09:42
Пардон.
У меня сложилось впечатление что автор работает с SQL данными.
Соответственно модель должна быть QSqlQueryModel.
в этом случае будет достаточно:
Код:
while (model->canFetchMore()) {
    qDebug() << "Loaded fetchMore [" << model->rowCount() << "]";
    model->fetchMore();
    // if ( model->rowCount() > 1000 ) break; // для начала хватит ~1000 записей
}
кстати fetchMore(); грузит кажется по 255 записей, можно както это количество регулять?

ЗЫ: в случае если впечатление сложилось неверно - подсказка бесполезна  :-[


Название: Re: Как заставить представление считывать данные из модели для всех ячеек сразу ?
Отправлено: ритт от Января 18, 2008, 10:29
дэйв, подсказка бесполезна

[qoute]кстати fetchMore(); грузит кажется по 255 записей, можно както это количество регулять?[/qoute]
программно нельзя. это константа