c++ - 如何只选择需要的 Qt 头文件?

标签 c++ qt header-files

在每个文件中包含大量 Qt 和项目头文件的大型 Qt 项目中,很容易:

  1. 包含不需要包含的额外 Qt 文件,因为它们已经包含在另一个 Qt 文件中(例如,qbytearray.h 包含在 qstring.h).
  2. 忘记包含所需的 Qt 文件,因为它们已经包含在其他包含的项目文件中(例如,编译器发现 qstring.h 包含在您的另一个文件中并且不会提示)。
  3. 留下了修改后不再需要的额外 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++ 来说是通用的,这是一种获得最佳头文件依赖性的方法。

最佳答案

最小化包含文件读取数量的经验法则:

  1. A .cpp文件通常有一个关联的标题。必须首先包含该 header - 它确保 header 将自行编译并且不会丢失任何依赖项。

  2. 对于任何类层次结构,只包括最派生类的标题。例如。如果你包括 <QLabel> , 你不需要 <QFrame> , 也不 <QWidget> , 也不 <QObject> .如果包括 <QGraphicsView><QLabel> , 你不需要 <QAbstractScrollArea> , 也不 <QFrame> , 也不 <QWidget> , 也不 <QObject> .等等。

  3. 除了前面的规则外,不要依赖“其他文件包含的文件”。 IE。 QString包括 QByteArrayQString 的实现细节和 API不保证此类包含。

最小化编译源文件数量的经验法则:

  1. 通过添加 #include "foo.moc" 将编译文件的数量减少两个 (!!)在每个 foo.cpp 的末尾实现新的 QObject类型。

  2. 短类(总共 <250 行)属于单个 .h文件,没有必要在 .h 之间分隔它们和 .cpp .

关于c++ - 如何只选择需要的 Qt 头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784165/

相关文章:

c++ - 如何在Qt中强制绘画?

Gcc无法识别 `-I../path`

c++ - 错误 C1004 : unexpected end-of-file found in Visual Studio 2012

c++ - 使用给定框架从另一个 C++ 类调用/引用变量或函数

c++ - Visual Studio : E0349 no operator << matches these operands (but no strings in code)

c++ - 在我编写的处理 csv 文件的相当基本的 C++ 程序中寻找错误

c++ - vector::erase 是否会对 vector 中的元素重新排序?

javascript - 找不到 Qt Creator 导入文件

qt - QVision Widget 编译时出错

c - 扩展名为 "h.in"的文件是什么意思?