2009-08-03 6 views
1

私はリファクタリングを行っています。 Model-View-Controllerパターンを実装しています。ビューはQtウィジェットです。QAbstractTableModelサブクラスを使用するQtウィジェットを使用したMVC

元々、Qtウィジェットは、ヒープ上にQAbstractTableModelサブクラスの新しいインスタンスを作成しました。それをFooTableModelと呼ぶことができます。

例えば

Widget::Widget(QWidget* parent) 
    : 
    QWidget(parent) 
    m_model(new FooTableModel(this)) 
{ 

は私ではなく、MVCモデルにFooTableModelの新しいインスタンスを作成する必要がありますか?

そうすることによって、私はビューへの依存を作成することができます私はFooTableModelをFooTableModelコンストラクタに何も渡さないと、手動で削除することができ、また

を(私はまだFooTableModelコンストラクタにウィジェットのポインタを渡すと仮定して)私のMVCモデル。 *

最後のオプションは、FooTableModelの作成をウィジェットに残すことです。 (そしてウィジェットがFooTableModelを直接処理させるようにしてください)

何か提案や設定はありますか?

私の推測は、現時点では*とすることです。

答えて

2

一般に、ビューをモデルに渡さないようにしたいとします。

MVCモデルがQObjectで、FooTableModelインスタンスがその子である場合は、Qtがそれを行うため、クリーンアップについて心配する必要はありません。理想的には、Qtを使用している場合は、FooTableModelがモデルになります。

Qtはコントローラの作業がビューによって処理されるため、Model/Viewパターンに従います。チェックアウト:http://doc.trolltech.com/4.5/model-view-introduction.html

短い答え:FooTableModelに何も渡さず、完了したら削除します。

+0

提案していただきありがとうございます。 :)私のMVCモデルはQObjectではないので、私はそのデストラクタでクリーンアップを行います。私のMVCモデルは、ウィジェット全体に渡ってデータを処理しています.FooTableModelは、ウィジェットに描画されたQTableViewに使用されています。私はおそらくこれに固執するでしょう。 "Qtを使用している場合、FooTableModelはモデルになります"。ウィジェット全体のモデルとしてQtモデルを使用する必要があるのですか? (自分のものを転がすのではなく)私はこれをどうやってやるか分からない。私は通常、Qtモデルと関連するビューをリンクします。 –

+0

大変遅れて申し訳ありません。はい、理想的には、いくつかのQAbstractItemModelクラスをウィジェット全体のモデルとして使用します。すべてのモデルがQAbstractItemModelへの参照と他のいくつかのプロパティへの参照を格納している場合は、そのモデルタイプから継承してプロパティを格納することもできます。これにより、Model/Viewフレームワークでさらに多くのオプションが可能になります。 –

関連する問題