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

Why doesn't Qt Creator find included headers in included paths - even though qmake is able to find them

本文关键字:包含 qmake 即使 Creator Qt 路径 为什么 找不到      更新时间:2023-10-16

我加入了一个已经存在的(开源)Qt4项目来添加一些功能。该项目使用Qt 4.8.5在Linux Slackware上完美编译和运行。作为IDE,我第一次使用KDevelop(随Slackware一起提供),但KDevelop不支持Qt项目文件(因为它主要使用cmake,所以我不得不使用makefile来导入项目)。现在我想切换到QtCreator,但包含(相对)路径中的头文件无法识别。例如,项目文件位于"dir0/programs/prog1/prog1"中,一些额外的标头位于"dir0-gui/extra.h"中。"dir0/gui"通过项目文件中的INCLUDEPATH += ../../gui行添加到搜索路径中。如果我把鼠标悬停在项目的.h文件中的#include "extra.h"上,我总是会弹出一个弹出窗口,上面写着"extra.h:没有这样的文件或目录"。

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

非常感谢任何帮助:-)

Konrad


EDIT:我刚刚意识到,整个Qt框架也没有得到Qt创建者的认可。当我键入#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

guid.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
}

我使用premake和make来构建我的项目,并将QtCreator作为IDE。我遇到了和您相同的问题,使用了仅头库GLM。我的源代码包含以下行:#include <glm/glm.hpp>。它编译时没有出错,但QT Creator找不到文件,所以我无法通过按住CTRL键并单击库提供的一些函数来跳转到它或它包含的函数。

在我的项目文件夹中有一个名为"Tree.includes"的文件,其中"Tree"是我的QT Creator项目的名称。我不得不将路径添加到我使用的库中,结果成功了。

usedLibraries/glm/

我的"Tree.includes"文件如下:

project/src
usedLibraries/glm/
usedLibraries/glew-1.11.0/include/
usedLibraries/glfw-3.0.4/include/

我的项目文件夹如下:

.
├── project
│   ├── bin
│   ├── build
│   ├── gcc.txt
│   ├── include
│   ├── Makefile
│   ├── premake4.lua
│   └── src
├── Tree.config
├── Tree.creator
├── Tree.creator.user
├── Tree.files
├── Tree.includes
└── usedLibraries
├── glew-1.11.0
├── glfw-3.0.4
└── glm

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

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

例如,我想使用#include<QtSql>模块,但什么都不起作用。编译器找不到此文件。然而,我发现我可以使用#include<QtSql/QSqlDatabase>(以及在QtSql中声明的所有类型),但随后我出现了"undefined reference"错误。


解决方案:您必须在.pro文件中添加您正在使用的模块,如下所示:

QT = core gui

(这是我默认情况下的样子)这就是我现在的样子,也是它对我的作用:

QT = core gui sql

希望这能帮助其他有同样问题的人。


这在Windows和Ubuntu上都有效!

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

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

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

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

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

我把它改成这个:

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