为什么Qt Creator在包含的路径中找不到包含的标题 - 即使qmake能够找到它们

时间:2013-12-20 10:44:33

标签: c++ qt include qt-creator header-files

我加入了一个已经存在的(opensource-)Qt 4项目来添加一些功能。该项目使用Qt 4.8.5在Linux Slackware上进行编译和运行。作为IDE,我首先使用KDevelop(Slackware附带),但KDevelop不支持Qt项目文件(因为它主要使用cmake,我必须使用makefile导入项目)。现在我想切换到Qt Creator,但无法识别包含(相对)路径中的头文件。例如,项目文件位于“dir0 / programs / prog1 / prog1.pro”中,一些额外的标题位于“dir0 / gui / extra.h”中。 “dir0 / gui”被项目文件中的行INCLUDEPATH += ../../gui添加到搜索路径中。如果我将鼠标悬停在#include "extra.h"项目的.h文件中,我总会得到一个弹出窗口“extra.h:没有这样的文件或目录”。

在KDevelop中没有问题,qmake也得到了它。造物主的问题是什么(我使用的是2.8,还试过3.0)

非常感谢任何帮助: - )

康拉德


编辑:我刚才意识到,整个Qt框架也不被qt-creator识别。当我键入#include "时,自动完成建议的标题都位于“/ usr / include”或项目目录中。例如,我甚至不能#include <QtGui>

这可能是什么问题?


EDIT2:项目文件还包括gui.pri和local.pri,它们也被其他几个项目使用。我尝试压缩文件 - 它仍然可以编译而没有问题。

实际项目文件位于“dir0 / programs / us_convert”

include( ../../gui.pri )
QT           += xml

TARGET        = us_convert

HEADERS       = us_convert_gui.h       \
                us_convert.h           \
                us_convertio.h         \
                us_experiment.h        \
                us_experiment_gui.h    \
                us_selectbox.h         \
                us_intensity.h         \
                us_get_dbrun.h         \
                us_mwl_data.h

SOURCES       = us_convert_gui.cpp     \
                us_convert.cpp         \
                us_convertio.cpp       \
                us_experiment.cpp      \
                us_experiment_gui.cpp  \
                us_selectbox.cpp       \
                us_intensity.cpp       \
                us_get_dbrun.cpp       \
                us_mwl_data.cpp

gui.pri位于“dir0 /”

# Profile include file for applications

!include( local.pri ) error( "local.pri is missing.  Copy from local.pri.template and update variables as appropriate" )

TEMPLATE     = app
DESTDIR      = ../../bin
MOC_DIR      = ./moc
OBJECTS_DIR  = ./obj
VER          = 10

CONFIG       += $$DEBUGORRELEASE qt thread warn

unix {
  LIBS       += -L../../lib -lus_gui -lus_utils
  LIBS       += -lcrypto
  LIBS       += -lqwtplot3d-qt4 -lGLU
  LIBS       += -L$$MYSQLDIR -lmysqlclient
  DEFINES    += INTEL LINUX

  INCLUDEPATH  += $$MYSQLPATH ../../$$QWT3D/include
  INCLUDEPATH  += ../../gui ../../utils $$QWTPATH/include ..
}

local.pri,也位于“dir0 /”

DEBUGORRELEASE += debug 

unix {

  MYSQLPATH   = /usr/include/mysql/
  QWTPATH     = /usr/local/qwt-5.2.2
  SINGLEDIR   = /usr/lib/qt/qt-solutions/qtsingleapplication/src
  MYSQLDIR    = /usr/include/mysql
  QWT3D = /qwtplot3d-qt4/
  LIBS        += -L/usr/local/qwt-5.2.2/lib -lqwt

}

3 个答案:

答案 0 :(得分:2)

我知道我的答案很晚,但我遇到了同样的问题,并且在很多不同的帖子中都没有解决方案,但后来我找到了一个适合我的解决方案:

您必须在.pro文件中添加正在使用的模块:

例如,我想使用#include<QtSql>模块,但没有任何效果。 编译器找不到此文件。我发现我能够#include<QtSql/QSqlDatabase>(以及在QtSql中声明的所有类型),但是我得到了"undefined reference"错误。

解决方案:您必须在以下行中添加您在.pro文件中使用的模块:

QT = core gui

(这是默认情况下我的样子) 这就是我现在的样子以及它对我有用的方式:

QT = core gui sql

希望这可以帮助那些遇到同样问题的人。

这适用于Windows以及Ubuntu!

答案 1 :(得分:0)

您还应该在.pro文件中包含HEADERS。

HEADERS  += ../../gui/extra.h

执行此操作后,保存项目,让它解析。然后删除您现有的构建文件夹(不要只是清理),然后尝试重新构建。

答案 2 :(得分:0)

我有同样的问题,我的问题是标题和源之间的空行:

HEADERS += \
                     #<- 1- this line was first problem
    blabla.h \       #<- 2- and added $$PWD here too

我将其更改为:

INCLUDEPATH += $$PWD

HEADERS += \
    $$PWD/qquickgridstar.h \