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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Большие модели  (Прочитано 15349 раз)
titan83
Гость
« Ответ #15 : Октябрь 02, 2016, 17:35 »

Отключите обновление таблицы на момент заполнения данными, время должно сократиться.
спасибо.
функция resetModel() в начале листинга содержит две строки:
beginResetModel();
endResetModel();
модель не обновляется.
пробовал ставить beginResetModel() в начале, а endResetModel() - в конце. Нет эффекта.
Записан
Bepec
Гость
« Ответ #16 : Октябрь 02, 2016, 17:38 »

Не модели, а таблицы Веселый Хотя мб и не поможет, я пока не видел какой тип View вы используете Смеющийся
Записан
titan83
Гость
« Ответ #17 : Октябрь 02, 2016, 17:43 »

Не модели, а таблицы Веселый Хотя мб и не поможет, я пока не видел какой тип View вы используете Смеющийся
Я использую QTableView со своим делегатом, будьте добры, подскажите как можно "отключить обновление" именно в представлении? Я думал, что beginResetModel() и иже с ним, как раз и сообщают представлению, что с графическим обновление надо подождать.
Записан
titan83
Гость
« Ответ #18 : Октябрь 02, 2016, 17:47 »

А для чего это перекладывание?
Вы получаете QWshDatabase::SqlRecordsList data, вот и храните этот список, и данные берите от туда, когда вьюшка их будет спрашивать через data().
Что достигается этим копированием из data в _data?
В принципе, это разумно, но перед релизом я такой рефакторинг делать точно не буду))
К тому же данных должны быть немного распарсены перед использованием, ваш подход тоже разумен - парсить прямо перед отправкой во вью.
Я сейчас осмысливаю опыт с этого проекта, чтобы в следующем уже сделать все разумнее и проще.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #19 : Октябрь 02, 2016, 18:17 »

В принципе, это разумно, но перед релизом я такой рефакторинг делать точно не буду))
Вы серьезно?
Да что там рефакторить? Метод data модели? Улыбающийся
Записан
Bepec
Гость
« Ответ #20 : Октябрь 02, 2016, 18:19 »

ui.tableView->setUpdatesEnabled(bool )
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #21 : Октябрь 02, 2016, 18:21 »

ui.tableView->setUpdatesEnabled(bool )
Это ничего не даст.
Записан
titan83
Гость
« Ответ #22 : Октябрь 02, 2016, 18:23 »

ui.tableView->setUpdatesEnabled(bool )
Спасибо, посмотрел - это метод QWidget, не думаю, что это как-то поможет - основная работа идет с массивами данных, а не с виджетом.
Записан
titan83
Гость
« Ответ #23 : Октябрь 02, 2016, 18:30 »

В принципе, это разумно, но перед релизом я такой рефакторинг делать точно не буду))
Вы серьезно?
Да что там рефакторить? Метод data модели? Улыбающийся
Если я просто выводил один-в-один то, что пришло из БД во вью, то, конечно, я бы и не делал лишнюю прокладку. Но, к сожалению, я получаю описание ячейки (цвета фона-шрифта, состояние ячейки, поведение), мне надо его перевести в вид, удобный для как раз таки метода data() модели. Там около 350 строк кода в паре классов, и я не хотел бы переносить их в модель, т.к. не люблю классы-гиганты (>300-350 строк).
В любом случае - спасибо за участие.
Записан
titan83
Гость
« Ответ #24 : Октябрь 02, 2016, 18:32 »

Коллеги, мы все же немного отвлеклись. Главный вопрос для меня - возможно ли ЧАСТИЧНО загружать данные в модель, именно те, которые требуются предсталению в данный момент?
Записан
Bepec
Гость
« Ответ #25 : Октябрь 02, 2016, 18:50 »

Можно, если давать частичный запрос. По сути вы запрашиваете слишком много информации. Вам нужно запрашивать меньше.

PS вы немного не понимаете про виджет. При обновлении данных в View происходит следующее - каждая новая запись создаётся, отображается и только потом создаётся следующая. Убрав update виджета, мы убираем отображение из этой цепочки, что может сэкономить пусть и малую, но существенную часть.

PPS для Old и иных одаренных - да, при правильном создании модели данной ситуации не будет. Однако хз что там за модель и зачастую это может помочь Веселый
« Последнее редактирование: Октябрь 02, 2016, 19:03 от Bepec » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #26 : Октябрь 02, 2016, 19:05 »

PS вы немного не понимаете про виджет. При обновлении данных в View происходит следующее - каждая новая запись создаётся, отображается и только потом создаётся следующая. Убрав update виджета, мы убираем отображение из этой цепочки, что может сэкономить пусть и малую, но существенную часть.
Это вы не понимаете. Все совсем не так. Если модель не уведомляет view о вставке/удалении строки, то ничего построчно не обновляется.
В данном случает, view обновится после отработки вышеприведенного кода - один раз. Правда не понятно, для чего вызывается resetModel до обвновления _data, а не после... но это частности. Улыбающийся
Записан
Bepec
Гость
« Ответ #27 : Октябрь 02, 2016, 19:09 »

Вы, как и я, в душе не чаете что там в модели. Так же как и нет уверенности в том, что приведенный код выдернут из проекта Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #28 : Октябрь 02, 2016, 19:39 »

Вы, как и я, в душе не чаете что там в модели.
Там "чаять" нечего.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #29 : Октябрь 02, 2016, 19:42 »

Коллеги, мы все же немного отвлеклись. Главный вопрос для меня - возможно ли ЧАСТИЧНО загружать данные в модель, именно те, которые требуются предсталению в данный момент?
Посмотрите, поддерживает ли MSSQL ключевые слова LIMIT и OFFSET, но лучше продумайте мощную систему фильтров, что-бы пользователю не приходилось ковыряться в 100500 строках не нужных ему данных.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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