多くのデータ モデルに QSortFilterProxyModel を使用していますが、問題なく動作しました。Qt5.3.0 から Qt5.3.1 に更新した後、これは部分的に変更されました。
私の GUI パネルの 1 つは、QSqlTableModel に接続された QSortFilterProxyModel に接続された QTreeView を使用します。SQL モデルは、約 60000 行と 6 つの共通列を持つデータベース テーブルに割り当てられます。
Qt5.3.0 を使用すると、データの読み込みは簡単でした。データを読み込むのに数秒かかり (ネットワーク トラフィック モニターとしてタスク マネージャーを使用)、QTreeView にデータを表示するのにさらに 1 秒かかりました。
苦労したQt5.3.1を使用しています...データをロードするにはまだ数秒かかりますが、データが最終的にビューに表示される前に、CPUコア全体が数分間ブロックされます(アプリケーションが応答しなくなります)。
この問題は、同様の行数を持つカスタム モデル (抽象テーブル モデルから派生) を使用すると発生しません。
また、プレーンな 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();
私は2つの回避策を見つけました。ただし、プロキシ モデルを使用して現在行っていることを行うには十分強力ではありません。
- QSqlTableModel の並べ替えとフィルタリング (WHERE および ORDER BY ベース) を使用します。
- 並べ替えを無効にする
setSortingEnabled(false);
誰かが問題を知っていますか?より良い回避策はありますか?