2012-08-11 253 views
1

当我在Qt Creator中创建一个新的移动应用程序时,我注意到在自动生成的代码中,他们使用#include <QtCore/QCoreApplication>而不是#include <QCoreApplication>,一样。“#include <QtCore/QCoreApplication>”与“#include <QCoreApplication>”

由于Qt Creator本身就是这样做的,我认为这是推荐的约定。但是有什么理由这样,有人可以解释什么是使用#include <QtCore/QCoreApplication>而不是#include <QCoreApplication>

+0

这真的和Qt无关,它只是一个关于你应该在代码文件中限定包含路径的深度的问题。我真的不认为有“推荐的约定”。你只是在你的环境中做任何有意义的事情。 – 2012-08-11 08:05:10

回答

3

有使用这种惯例多个原因: -

  1. 如果包含路径在编译器是在QtCore的目录水平,那么它会跟踪包括文件QCoreApplication从那里。
  2. 由于有存在于同一目录的Qt的多个版本时,优选使用该丢弃歧义的公约。(由于两个QCoreApplication一个属于QT3和其他的Qt4会误导编译器)

我有两个目录在/ usr/include中/

  • QtCore
  • 的Qt

它们都有QCoreApplication 在他们中。

1

对于从表单生成的代码,您可以在“Designer”选项卡选项中更改:“在#include-directive中使用Qt模块名称”。

指定模块时,我注意到一个小问题,但有时很烦人。默认情况下,qmake添加/path/to/qt/sdk/include以包含路径。这意味着,你可以做例如

#include <QtGui/QWidget> 

即使在您的项目文件,你有

QT -= gui 

然后编译去罚款,但链接器会生你的气,因为QtGui4库不会被选中进行链接。

如果你没有

#include <QWidget> 

编译反而会失败。

+0

不指定模块的另一个原因是我之前看到的是Qt5迁移和QtGui与QtWidget,如果你没有指定模块,你可以让你的项目在两者上编译。 – sashoalm 2013-11-04 14:33:56