初心者の質問があります。 Model-View-Controllerの設計パターンを正しく理解しているかどうかはわかりません。ファイル全体をQStandardItemModelに読み込んだ後でQTableViewを更新する
多分、私の問題の説明から始めます。私はファイルからいくつかのデータを読んでいます。これは10秒後に私はそれらのデータをテーブルに提示すると言うことができます。問題はそれらのデータをどのように保存すべきかということです。 QStandardItemModel
以外にも、ファイルからデータを読み込んで別のスレッドで使用する別のコンテナを用意する必要がありますか?たとえば、GuiスレッドにQStandardItemModel
があります。別のコンテナを作成して、QVector
としましょう。ファイルのデータをQVector
にロードしてから、QVector
からQStandardItemModel
にデータを移動しますか?
私が知っているようQStandardItemModel
がappendRow
後のビューを更新するための信号を発するので、私はGUIがフリーズするので、他のスレッドでQStandardItemModel
を使用してQStandardItemModel
にファイルから直接データを読み取ることができません。
または、カスタムモデルを作成して、ファイル全体がQStandardItemModel
にロードされたときにのみビューを更新する方法を追加する必要がありますか? QTableView
にはデータ用の独自のコンテナがあり、モデルと同期されていませんか?それは可能か正しい方法ですか?
新しいファイルを読み込んだ場合はどうなりますか?
ありがとうございました。
ファイルからデータを1回だけロードするか、何度かロードしますか? –
ええ、複数です。唯一の場合は、QStandardItemModelをGUIと読み取りファイルスレッドの間で共有できると思います。 新しいファイルを読むときは、新しいデータだけをモデルに記入したいと思います。私はファイルを読むたびに新しいモデルを設定することを考えていましたが、それはすばらしい効率的な解決策ではないと思います。 btw。その場合、古いQStandardItemModelからメモリを削除する方法はありますか? – Cherubim
ファイルをモデルに読み込むために* 10秒*かかると、非常に大きな**行数/列数があると思います。 'QStandardItemModel'でそれらを一度にロードすることはお勧めしません。' QAbstractItemModel'、['canFetchMore'](https://doc.qt.io/qt-5/qabstractitemmodel.html#canFetchMore)を使っていくつかの遅延読み込みを行います。 、['fetchMore'](https://doc.qt.io/qt-5/qabstractitemmodel.html#fetchMore)。これは、[QSqlQueryModel'](https://code.qt.io/cgit/qt/qtbase.git/tree/src/sql/models/qsqlquerymodel.cpp#n190)で内部的に使用される戦略であることに注意してください。大きい*モデル。 – Mike