私の目標は、データベースへのシッククライアントを作成することです。基本的には、3つのデータリストを管理することがすべてです。
アプリケーションを分離されたレイヤーにスライスしたいので、QtのModel/Viewフレームワークを使用するのは自然なことのようです。
- QSql * Modelインスタンスはいつ作成する必要がありますか?
データベースに何度か接続/切断できる必要があります(そのためのメニュー項目があります)。たくさんのモデルを削除して、接続/切断するたびにもう一度作成することに満足していません。
別のアプローチはありますか?
- QSql * Modelインスタンスはどこに作成すればよいですか?
MainWindowやその他のGUI関連のクラスが次のようなコードを保持することは想定されていないと思います。
m_goodsModel->setRelation(1, QSqlRelation("Level", "LevelId", "Name"));
GUIをデータ構造から切り離したい。それを行う方法はありますか?
- いつ、どこでビューをモデルにバインドする必要がありますか?
私は自分の3つのリストを12の方法で表現する必要があります。接続/切断するたびにモデルを再作成する場合は、新しく作成したモデルをすべてのビューに再度挿入する必要があります。
それが一度だけできたらいいのですが、どうしたらいいのかわかりません。
- 厄介な
QSqlTableModel::select()
方法をどうするか?
これは私を夢中にさせます。QStringListModel
データをすぐに使用できる他のモデル(たとえば、など)とは対照的にQFileSystemModel
、から派生したモデルは、QSqlTableModel
手動でメソッドを呼び出すまで役に立ちませんselect()
。その呼び出しの前は、モデルは空であるため、そのモデルを使用するビューは空です。ヘッダーデータにもデータが入力されていないため、ビューはどの列をレンダリングする必要があるかさえわかりません。
呼び出しを避けselect()
られないので、うまく収まるようにどこに置くべきか疑問に思います。MainWindowやその他のGUI関連のクラスにそのコードを含めるべきではないと思います。
- パフォーマンスと堅牢性
dbの再接続時にすべてを再初期化するのはうれしいことではありません。それを行うには時間がかかりすぎます(つまり、実行中)。また、ビューが引き続きモデルを参照している可能性があるため、モデルの再作成プロセス中にクラッシュが発生しないようにしたいと思います。
すべてを一度だけ設定し、再接続を適切に処理する他の方法はありませんか?