在每个文件中包含大量 Qt 和项目头文件的大型 Qt 项目中,很容易:
- 包含不需要包含的额外 Qt 文件,因为它们已经包含在另一个 Qt 文件中(例如,
qbytearray.h
包含在qstring.h
). - 忘记包含所需的 Qt 文件,因为它们已经包含在其他包含的项目文件中(例如,编译器发现
qstring.h
包含在您的另一个文件中并且不会提示)。 - 留下了修改后不再需要的额外 Qt 文件。
我也一直在阅读,即使使用现代编译器,it is better to include the files needed ,而且只有那些,instead of the easy way of including more generic headers like QtCore
and QtGui
.
规则看起来很简单:只包含你需要的所有东西,不要依赖于其他包含的文件,以防它们在未来发生变化(例如,qstring.h
不能使用 qbytearray .h
了,对于项目文件也是如此),但实现起来并不容易。 Qt Creator 对此帮助不大,因为当您开始编写 QStr...
时,它会自动完成 QString
并进行编译,而您甚至不需要想知道为什么也不想包含标题。
是否有 Qt 头文件依赖列表或自动 Qt 工具或规则或其他东西来确保我选择了我需要的所有头文件而不是其他?这个问题对 C/C++ 来说是通用的,这是一种获得最佳头文件依赖性的方法。
最佳答案
最小化包含文件读取数量的经验法则:
A
.cpp
文件通常有一个关联的标题。必须首先包含该 header - 它确保 header 将自行编译并且不会丢失任何依赖项。对于任何类层次结构,只包括最派生类的标题。例如。如果你包括
<QLabel>
, 你不需要<QFrame>
, 也不<QWidget>
, 也不<QObject>
.如果包括<QGraphicsView>
和<QLabel>
, 你不需要<QAbstractScrollArea>
, 也不<QFrame>
, 也不<QWidget>
, 也不<QObject>
.等等。除了前面的规则外,不要依赖“其他文件包含的文件”。 IE。
QString
包括QByteArray
是QString
的实现细节和 API不保证此类包含。
最小化编译源文件数量的经验法则:
通过添加
#include "foo.moc"
将编译文件的数量减少两个 (!!)在每个foo.cpp
的末尾实现新的QObject
类型。短类(总共 <250 行)属于单个
.h
文件,没有必要在.h
之间分隔它们和.cpp
.
关于c++ - 如何只选择需要的 Qt 头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784165/