包含Qt标头的正确方法是什么?

uli*_*tko 6 c++ qt qt4

到目前为止,我知道几种#includeQt类的方法:

  • #include <QtModule>

    例如QDomDocument,这带来了特定模块的所有类QDomElement,QDomNode以及来自的许多其他类#include <QtXml>.

  • #include <QClassName>

    这增加了一个特定的类,可能想要使用,例如声明QEvent,QStringList,QFile.

  • #include <qcstyleheader.h>

    这具有前一方法的效果,除了不同的标题名称.

所以我想知道,#includeQt课还有其他方法吗?它们是否相同,或者由于某些原因,它们中的一些是否优先于其他人?这取决于#include内部.cpp还是.h文件?这会影响可执行文件的编译速度和大小吗?

简而言之,最好的方法是什么?

gav*_*inb 10

通常,头文件越多,编译器解析每个模块所需的时间就越长.(显然,预编译的头文件会产生一些问题.)因此,您通常希望包含正确构建应用程序所需的最少头文件.

如果您只在给定的编译单元中使用几个类,那么只需按现代风格的名称包含类:

#include <QEvent>
#include <QPainter>
#include <QFont>
Run Code Online (Sandbox Code Playgroud)

如果您使用给定模块中的大量类,则可能同样容易包含模块级标头,例如:

#include <QtGui>
Run Code Online (Sandbox Code Playgroud)

.h如果不存在较新的样式标题,通常只使用旧样式.

现在,预编译的头文件通过编译成二进制形式来缓解许多这些问题.但是,将预编译符号加载到内存中并在编译时搜索它们仍然需要付出代价.因此,您投入的越少,构建的效率就越高.

  • 有人知道如何让 Visual Studio 自动完成功能停止拍摄 .h 版本,而不给我其他选择吗?在这个问题上,我一直在使用 VS 来对抗它:“不!我想就此打住,不要在我刚刚输入的内容中添加 .h,当我放置结束 &gt;!” -&gt; [ESC]“啊”&gt; 真他妈烦人。 (2认同)