Название: QSqlTableModel + TableView = медленная работа Отправлено: gladsky от Декабрь 15, 2016, 16:38 Есть Microsoft SQL server, таблица на 10 колонок, 2000 строк.
Приложение с QSqlTableModel и Tableview работает медленно. Даже если оставить в приложении только отображение одной этой таблицы (взял стандартный пример "cashed table" и заменил там подключение к БД на своё), окошко двигается рывками при масштабировании, прокрутка тоже тормозит. Если брать данные из БД запросами, хранить их в хеш-таблицах, и выводить через tablewidget - всё идеально. Работает гладко, как будто в экселе таблица открыта. Но количество кода растёт в геометрической прогрессии: нужно прописывать самому делегаты для внешних ключей, логику отображения данных в других виджетах, весь код на запись данных обратно в БД. Если записей будет слишком много, уже придется самому писать логику кеширования и динамической подгрузки данных. Какие есть способы ускорить работу с QSqlTableModel и Tableview? Название: Re: QSqlTableModel + TableView = медленная работа Отправлено: PimenS от Декабрь 15, 2016, 18:36 QSqlTableModel + TableView 50000 строк = никаких тормозов.
Покажите настройки TableView Название: Re: QSqlTableModel + TableView = медленная работа Отправлено: Bepec от Декабрь 15, 2016, 22:25 Смотря какие строки. Таблица с более 40 колонками уже начинают подтормаживать :D
Название: Re: QSqlTableModel + TableView = медленная работа Отправлено: PimenS от Декабрь 16, 2016, 00:13 Смотря какие строки. Таблица с более 40 колонками уже начинают подтормаживать :D 40 не пробовал, ничего не скажу. Но думаю если использовать стандартную модель, да еще представлению сказать resizeColumnsToContents(), то наверное тормоза будут хорошие. Название: Re: QSqlTableModel + TableView = медленная работа Отправлено: gladsky от Декабрь 16, 2016, 09:51 Покажите настройки TableView Всё по умолчанию, я экспериментирую на самом простом примере (программа уже написана под tablewidget, решил по-человечески переписать через модель, пока экспериментирую с производительностью).Код: QTableView *view = new QTableView;
Название: Re: QSqlTableModel + TableView = медленная работа Отправлено: Bepec от Декабрь 16, 2016, 09:56 Вы бы лучше весь проект выложили. Возможно у вас ошибка где нить в другом месте, которую вы не видите.
Название: Re: QSqlTableModel + TableView = медленная работа Отправлено: PimenS от Декабрь 16, 2016, 10:04 Вы бы лучше весь проект выложили. Возможно у вас ошибка где нить в другом месте, которую вы не видите. Тормоза-то на примере: Цитировать взял стандартный пример "cashed table" и заменил там подключение к БД на своё ЗЫ. Сейчас специально попробовал на такой таблице: Код: CREATE TABLE catalogs.ref_spareparts Строк (сосчитано) 49796 - тормозов не заметил. Так, что скорее всего или Microsoft SQL server или я не знаю. Название: Re: QSqlTableModel + TableView = медленная работа Отправлено: gladsky от Декабрь 19, 2016, 11:28 Судя по всему, QSqlTableModel c TableView не могут нормально работать с сетевыми базами данных, т.к. во-первых запросы к БД идут через создаваемые на лету курсоры вместо обычных селектов, а во-вторых запрос, вставка в таблицу и её отрисовка идут в одном потоке, из-за чего задержка даже в 100 мс между запросом и получением данных приводит к тормозам интерфейса.
Придётся писать свой класс от QAbstractItemModel, чтобы сделать более быструю выгрузку данных и все операции с БД убрать в отдельный поток. |