9

私は、QT フレームワークを C++ と組み合わせて使用​​することにかなり慣れていません。私は疑問に思っていました: 私のドメインクラスを QObject に基づいたものにするのは良い考えですか? それとも、階層の上位のクラスに対してのみこれを行う必要がありますか? (ユーザー インターフェイス レベルに近い)。QTのドキュメントはこれについて明確ではありません:

QTのドキュメントから取得:

メタオブジェクト システムは、言語を真のコンポーネント GUI プログラミングにより適したものにする C++ 拡張機能です。

明らかに、適切に構造化された方法でアプリケーションを構築したいと考えています。ここ数日、私はこの質問に対する答えを見つけるために QT のドキュメントを閲覧してきました。私のアプリケーションが永遠にぐったりするような基本的な間違いを犯したくありません;-)。

QObject と Qt Object モデルの基本的なドキュメントは既に見てきました。私はまた、助けになったが実際には結論に達するのに役立たなかったフレッシュミートの記事を見つけました. 私を混乱させる他の何かは、すべての QT クラスが基本クラスとして QObject を使用するわけではないため、QT 自体がこの問題に関して一貫していないように見えることです。

QObject を基本クラスとして使用する利点は、次のとおりです。

  • 階層
  • シグナルとスロット
  • プロパティ
  • 保護されたポインターを使用できるようにする
  • 国際化

ただし、ほとんどのドメイン クラスではこれらの機能は必要ありません。これに関するベスト プラクティス ルールはありますか? それとも、上記のポイントのいずれかが必要な場合に使用するというルールにする必要がありますか?

これをあまり混乱させないことを願っています:-)

4

6 に答える 6

10

一般に、「やむを得ない必要性」がない限り、ドメイン クラスを「バニラ」のままにしておく方がよいでしょう。これにより、将来的に最も柔軟性が得られます (たとえば、Qt 以外の環境でそれらを再利用するなど)。

于 2010-07-18T15:01:31.470 に答える
1

QObjectから不必要に継承しないのには十分な理由があり、それはドキュメントにあります

コピーコンストラクタまたは代入演算子はありません

QObjectには、コピーコンストラクターも代入演算子もありません。[...]

主な結果は、QObject(またはQObjectサブクラス)へのポインターを使用する必要があることです。そうしないと、QObjectサブクラスを値として使用したくなる可能性があります。たとえば、コピーコンストラクタがないと、QObjectのサブクラスをコンテナクラスの1つに格納される値として使用することはできません。ポインタを保存する必要があります。

于 2010-07-20T18:50:26.960 に答える
1

「上記のポイントのいずれかが必要な場合に使用してください」 - うまく言うのは難しい. すべてのクラスに不必要な機能を追加する理由はありません。共有ライブラリで定義されたクラスについても考えてください。QObject から派生させなければ、Qt 以外のクライアントでも使用できます。

于 2010-07-18T14:56:45.523 に答える
1

この問題は、あなたが思っているほど「大きく」はありません。それは本当にそれほど重要ではありません。やるかやらないかで全然違うと思います。したがって、経験則として、単純にするためだけに使用しないでください。ただし、シグナルスロットや Qt が実現するものが必要な場合は、先に進んでください。いずれにせよ、それほど費用はかかりません。

于 2010-07-18T14:57:27.470 に答える
0

私は学んでいます (ドキュメントを読んでいます) が、まだ Qt を使い始めていません。これがあなたの質問に対する私の意見です。単一のルート オブジェクト (MFC では CObject、VCL では TObject) を持つことは常に良いことなので、YourOwnRootObject などの独自のルート オブジェクトを定義します。ほとんどの場合 QObject が必要だと思われる場合は、YourOwnRootObject が QObject を継承するようにします。それ以外の場合は、QObject が必要になるまで YourOwnRootObject をそのままにしておきます。

于 2010-07-20T13:27:44.770 に答える
0

あなたの質問の反対に答えたいと思いますが、それは悪い考えではありません。それらが必要かどうかは、QObjectsニーズによって異なります。私にとって、プロパティとリフレクションを使用する機能は、信号とスロットよりも価値があります。QMetaObject柔軟なプログラミング戦略に非常に役立ちます

于 2010-07-19T01:38:39.753 に答える