Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QStandardItemModel - скорость создания элементов
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
lojka
Здраствуйте. Сразу перейду к делу.

Имею - запрос, вернувший много строк данных, хочу его отобразить, использую представление QTableView и модель QStandardItemModel.

Выбор этого типа модели объясняется тем, что эти самые строчки надо отображать "с бантиками", т.е. данные в ячейках надо раскрашивать в различный цвет, текст некоторых строк выделять жирным.

Итак, что выходит, пример:

Запрос возвращает, скажем, m записей

- выделяется память на модель (m, n),
- в цикле создаются m * n раз элементы QStandardItem и вставляются в модель (так как модель, до создания этих элементов как бы пустаая, нельзя подкрашивать (setForeground) строки и менять шрифт)
- в эти элементы вставляются данные из запроса
- там же в цикле m*n раз происходит перекрашиваие текста для элемента (setForeground)

итого, то, что я хочу, получается... но получается это ОООООООООЧЧЧЧЧЧЕЕЕЕЕЕЕНЬ медленно.


Модели QSqlQueryModel, QSqlTableModel - создают по 5-10к записей на экране за доли секунды, моя же модель будет столько же данных в себя вставлять несколько минут, но к сожалению в QSqlQueryModel, QSqlTableModel нелья цвета тексту в ячейках менять...

Посоветуйте направление, в котором копать, что можно использовать, что бы отображать данные, с измененным цветом текста и шрифта, но при этом ускорить процесс записи их в модель отображения их на экране?

Спасибо.
BRE
Цитата(lojka @ 19.1.2010, 20:25) *
Посоветуйте направление, в котором копать, что можно использовать, что бы отображать данные, с измененным цветом текста и шрифта, но при этом ускорить процесс записи их в модель отображения их на экране?

Направление модели + делегаты. ;)
Litkevich Yuriy
Цитата(lojka @ 19.1.2010, 23:25) *
QSqlQueryModel, QSqlTableModel нелья цвета тексту в ячейках менять...
как ты к такому выводу приш(ёл|ла)?
MoPDoBoPoT
Цитата(lojka @ 19.1.2010, 20:25) *
в QSqlQueryModel, QSqlTableModel нелья цвета тексту в ячейках менять...

Глубокое заблуждение. Можно либо отнаследоваться и переопределить метод data(), либо воспользоваться делегатом.
В интернете много примеров, поищи. Если что-то не понятно - пиши, постараемся помочь.


UPD Долго я писал :)
lojka
Цитата(Litkevich Yuriy @ 19.1.2010, 20:34) *
Цитата(lojka @ 19.1.2010, 23:25) *
QSqlQueryModel, QSqlTableModel нелья цвета тексту в ячейках менять...
как ты к такому выводу приш(ёл|ла)?


Пришел 8)

Да просто стандартных способов я не увидел, а то, что какими-то окольными путями (которые порой трудны и опасны для неискушенного данной библиотекой человека) можно все что угодно сделать, я догадывался, поэтому тут и задал вопрос, зная, что наверняка есть ответ.


Спасиб ребят, мысли ваши воспринял, советы приму к сведенью, даже начало что-то в голове вырисовываться, как доберусь до рабочего компа, попробую реализовать.
Litkevich Yuriy
Цитата(lojka @ 20.1.2010, 0:01) *
что какими-то окольными путями
окольные это какие?
lojka
Цитата(Litkevich Yuriy @ 19.1.2010, 21:12) *
Цитата(lojka @ 20.1.2010, 0:01) *
что какими-то окольными путями
окольные это какие?



Это те, которые далеки от простейшего использования Qt-шных классов (например написание унаследованных классов с переопределением методов, или использование делегатов). Просто я не очень хорошо еще знаю Qt, поэтому считаю эти пути окольными, а не прямыми, ровными, и самими собой разумеющимися :rolleyes:.
Litkevich Yuriy
Цитата(lojka @ 20.1.2010, 0:21) *
например написание унаследованных классов с переопределением методов
а как же ты окошки делаешь? Ведь нужно создавать наследника QWidget (QDialog или QMainWindow).
lojka
Спасиб за советы... реализовал, использовал свою модель, наследующую QSqlQueryModel, переопределением функции data().

Скорость (по сравнению с тем, что было у меня до этого, впечатляет). 8)
Litkevich Yuriy
lojka, вот видишь, это совсем не больно :)
Гость
Тема устарела))) но причиной медленной загрузки элементов в QStandartItemModel являлся скорее всего неоптемизированный SQL запрос (можно построчно вставлять запрашивая каждый элемент, а можно запросить все сразу), потому могу сказать что все там работает быстро, плюсом QSqlTableModel является поточная загрузка данных, что не тормазит отображение модели и загружает по мере надобности, то же можно сделать при помощи QStandartItemModel, только это сново изобритать велосипед.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.