【问题标题】:Trouble including Qt Headers包含 Qt 标头的问题
【发布时间】:2011-09-29 01:33:20
【问题描述】:

在 Qt 中,一些头文件是通过更典型的方式包含的

#include "QtCore/qtheader.h"

但有时它使用这种表示法:

#include <QString>

我不确定有什么区别或为什么这样做。无论如何,我在包含本身使用后一种表示法的标题时遇到了麻烦。有什么想法吗?

谢谢。

【问题讨论】:

  • 发布实际的错误消息、您使用的命令行以及您机器上标题的位置。您展示的第一个示例不是典型的。

标签: c++ qt


【解决方案1】:

这是你描述的奇怪行为。正在做

#include <QString>

应该“正常工作”,因为这几乎是标准的做法。

我唯一能想到的是您已经覆盖了项目文件中的QT 变量。例如,如果你这样做

QT=opengl

获取 OpenGL 模块而不是

QT+=opengl

然后你会得到你描述的行为。

【讨论】:

    【解决方案2】:

    由于您几乎没有提供有关错误以及您使用的开发环境类型的信息,因此如果您不使用 .pro 文件,则可能会出现以下问题。如果您实际使用 .pro 文件,这可能与您无关:

    如果您正在使用例如Visual Studio 而不是 Qt 项目文件,并且您只包含 $(QTDIR)\include,那么您将不得不编写

    #include <QtCore/QObject>
    #include <QtGui/QWidget>
    

    等等。这是因为 Qt 的 include 目录有子文件夹“QtCore”、“QtGui”等中的文件。

    如果您不想在包含中添加 QtCore 或 QtGui 或其他任何内容,则必须包含 $(QTDIR)\include\QtCore、$(QTDIR)\include\QtGui 等

    (请注意,我不能 100% 确定包含路径,无法在这台机器上查找)

    【讨论】:

      【解决方案3】:

      我不知道是什么给您带来了麻烦,因为您没有指定足够的详细信息。无论如何,在 C++ 中,当您使用 包含时,您的意思是您想要在包含路径中进行搜索。您可以在 Qt 中指定包含路径并添加一些目录,方法是添加:

      INCLUDEPATH += ...
      

      在项目文件中。 如果您使用双引号,您要求将当前源目录添加到包含路径。

      所以你会看到:

      #include <QString>
      

      因为在您的系统包含路径中应该有一个名为 QString 的文件。里面确实有:

      #include "qstring.h"
      

      其实一般在QtCore目录下。

      【讨论】:

      • 应该不需要向INCLUDEPATH 添加任何内容来获取Qt 标头。
      • 我确实没有这么说。我刚刚说过可以使用该指令添加新的包含路径。这个问题本身,加上“不管”这个词,让我觉得作者指的不是包括 Qt 标头在内的问题。
      • 我在 cmd 行使用 gcc,而不是 qt creator。
      • @glutz,知道你在命令行上使用 gcc 是一个重要的细节。如果您要这样做,您绝对必须了解如何指定包含路径,否则您将永远无法使用 Qt 或许多其他库。对于 Qt,我绝对推荐使用构建系统(如 QMake)来帮助您。
      【解决方案4】:

      在 C 和 C++ 中,当您使用双引号时,表示:搜索与此文件相同的目录。当您使用&lt;&gt; 时,它意味着:搜索包含路径。

      使用 gcc,您可以使用 -I 命令行参数添加包含路径。

      你在使用 Qt Creator 和 qmake 吗?如果您是,请在此问题/答案中编辑 .pro:How to add include path in Qt Creator?

      【讨论】:

      • 我的理解是“-I”用于包含文件,“-L”用于库文件。我错了吗?
      • 情况正好相反。 -L 用于库路径(.a 或 .so 所在的位置),-l 用于库的名称。喜欢-lm。我在上面写错了。让我修复它。 (我使用 -L 而不是 -I)
      • 由于字体不好,我说 -I(大写 i)用于包含文件。 L 选项用于库。
      • 应该不需要编辑 .pro 文件来获取核心 Qt 头文件,例如 QString
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2021-06-02
      • 2012-12-19
      • 1970-01-01
      相关资源
      最近更新 更多