В Qt 5.3.1 появилась проблема с QSqlTableModel и QSortFilterProxyModel

Я использую QSortFilterProxyModel для многих моделей данных, и он работал нормально. После обновления с Qt5.3.0 до Qt5.3.1 это изменилось частично.

Одна из моих панелей графического интерфейса использует QTreeView, прикрепленный к QSortFilterProxyModel, прикрепленной к QSqlTableModel. Модель SQL назначается таблице базы данных с около 60000 строками и 6 общими столбцами.

Использовать загрузку данных Qt5.3.0 было просто... потребовалось несколько секунд для загрузки данных (использовался диспетчер задач в качестве монитора сетевого трафика) и еще одна секунда для отображения данных в QTreeView.

Используя Qt5.3.1, который стал болезненным... ему все еще нужно несколько секунд для загрузки данных, но затем он блокирует все ядро ​​ЦП на несколько минут (делая приложение не отвечающим на запросы), прежде чем данные наконец появятся в представлении.

Эта проблема не возникает при использовании пользовательских моделей (полученных из модели абстрактной таблицы) с аналогичным количеством строк.

Я также попробовал то же самое с простым QSqlTableModel и созданным по умолчанию QSortFilterProxyModel (что означает, что фильтрация вообще не производится)... загрузка все равно требует нескольких минут. Это код, который я использую:

sqlTableModel = new QSqlTableModel(nullptr, QSqlDatabase::database(connectionName));

proxyModel = new QSortFilterProxyModel();
proxyModel->setSourceModel(sqlTableModel);

tableView = new QTableView();
tableView->setSortingEnabled(true);
tableView->setModel(proxyModel);

sqlTableModel->database().open();
sqlTableModel->setTable("table_name");
sqlTableModel->select();

Я нашел два обходных пути. Однако они не достаточно сильны, чтобы делать то, что я сейчас делаю, используя модель прокси:

  1. Использование сортировки и фильтрации QSqlTableModel (на основе WHERE и ORDER BY).
  2. Отключение сортировки setSortingEnabled(false);

Кто-то знает проблему? Есть ли лучший обходной путь?

0 ответов

Другие вопросы по тегам