2010-12-14 16 views
5

は、これまでのところ私は#include Qtのクラスには、いくつかの方法を知っている:これは#include <QtXml>から例QDomDocumentQDomElementQDomNodeおよび多数の他人のために、特定のモジュールのすべてのクラスをもたらしQtヘッダーを含める正しい方法は何ですか?

  • #include <QtModule>

  • #include <QClassName>

    これは、1つは、使用する可能性のある特定のクラス、例えばの宣言を追加しますQEvent,QStringList,QFile

  • #include <qcstyleheader.h>

    これは、異なるヘッダー名を探している以外は、従来の方法の効果があります。

他の方法がありますか?#include Qtクラスはありますか?彼らは同等か、何らかの理由で他の人に好まれる人がいますか?これは#include-.cppまたは.hファイル内にありますか?これはコンパイル速度と実行可能ファイルのサイズに影響しますか?

要するに、最善の方法は何ですか?

答えて

9

ヘッダーファイルが多いほど、コンパイラは各モジュールを解析するのに時間がかかります。 (明らかに、あらかじめコンパイルされたヘッダーは、この問題の一部をレンダリングします。)したがって、通常は、アプリケーションを正しく構築するために必要なヘッダーファイルを最小限に抑える必要があります。

あなたばかりモダンなスタイルで、名前によってクラスが含まそして、与えられたコンパイル単位でいくつかのクラスを使用している場合:

#include <QEvent> 
#include <QPainter> 
#include <QFont> 

あなたが与えられたモジュールから多数のクラスを使用している場合新しいスタイルのヘッダが存在しない場合は、一般的にのみ、古い.hスタイルを使用

#include <QtGui> 

:、のようなモジュールレベルのヘッダを含むように、おそらく同じように簡単です。

これで、プリコンパイルされたヘッダーは、一度バイナリ形式にコンパイルすることでこれらの問題の多くを軽減します。しかし、プリコンパイルされたシンボルをメモリにロードし、コンパイル時にこれらのシンボルを検索するコストはまだあります。だからあなたが入れないほど、より効率的なビルドになります。

+1

誰かが.hバージョンの撮影を中止し、そうでなければ私にオプションを与えないようにビジュアルスタジオオートコンプリートを取得する方法を知っていますか?私はこの問題でVSを使用している間ずっとVSと戦わなければなりません: "いいえ、私はちょうどそこに止まりたいです。 - > [ESC] "ahh">かわいそうな気がする。 –

+1

2010年には、ヘッダーの自動補完を無効にすることができます。 'Tools-> Options-> Text Editor-> C/C++-> Advanced-> #include auto-completion'を無効にしてください。 – RedX

1

この縫い目には、一般的な質問が含まれます。答えはシンプルです。必要なものだけを含めてください。そうしないと、コンパイルが遅くなります。ヘッダーで、宣言を転送しようとします。これで十分でない場合は、クラスを宣言するヘッダをインクルードしてください。

1

私は普遍的に存在しないとは思わない私の好みの方法は2番目の方法です。それは最も簡単なので、ファイル内のあらゆるクラス思考が必要です。

コンパイル速度は、はい、Qtヘッダがコンパイルに少し時間がかかることがあります。より速くコンパイルしたい場合は、.cppファイルに必要なものすべてを#includeします。場合によっては、.hファイルにインクルードする必要があります。クラスを宣言する場合は、基本クラスを#includeする必要があります。また、クラス内で値で保持するか、クラス関数で値渡しするメンバのクラスも必要です。ただし、ポインタ、スマートポインタ、または参照として宣言されているメンバおよび関数パラメータについては、#includeを "class foo;"に置き換えることができます。宣言。ヘッダーはより速くコンパイルされますが、実際に値を使っているときはいつでも、これらのクラスを#includeする必要があります。

+0

「普遍的な正しい方法が含まれているとは思いません...」Qtは誰の意見や気まぐれを合理的にサポートできないため、これは間違っています。 Qt自身が '#include 'と '#include 'をサポートしています。あなたが他の何かをすれば、あなた自身はあなた自身です:それはうまくいくかもしれないし、そうでないかもしれません。メンテナンス性とスタイルの順守にはメリットがあります。 –

1

私は、必要に応じて、各.h/.cppではなく、プリコンパイル済みヘッダー(example)で使用するすべてのQtインクルードを含めることから、かなりの利点(コンパイル時間が〜30%もちろん、マイナーな欠点は、個々のソースファイルがQtのどのビットに依存しているのかを見失うことができますが、これは問題ではありません。

関連する問題