简体   繁体   English

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

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

I joined an already existing (opensource-) Qt 4 project to add some functionality. 我加入了一个已经存在的(opensource-)Qt 4项目来添加一些功能。 The project compiles and runs perfectly on Linux Slackware with Qt 4.8.5. 该项目使用Qt 4.8.5在Linux Slackware上进行编译和运行。 As IDE I first used KDevelop (comes with Slackware), but Qt project files aren't supported in KDevelop (since it primarily uses cmake, I had to use the makefile to import the project). 作为IDE,我首先使用KDevelop(Slackware附带),但KDevelop不支持Qt项目文件(因为它主要使用cmake,我必须使用makefile导入项目)。 Now I want to switch to Qt Creator, but header files in included (relative-) paths aren't recognized. 现在我想切换到Qt Creator,但无法识别包含(相对)路径中的头文件。 For example the project file is in "dir0/programs/prog1/prog1.pro" and some extra headers are in "dir0/gui/extra.h". 例如,项目文件位于“dir0 / programs / prog1 / prog1.pro”中,一些额外的标题位于“dir0 / gui / extra.h”中。 "dir0/gui" is added to the search path by the line INCLUDEPATH += ../../gui in the project file. “dir0 / gui”通过项目文件中的INCLUDEPATH += ../../gui行添加到搜索路径中。 If I hover over #include "extra.h" in a .h file of the project I always get a popup saying "extra.h: No such file or directory". 如果我将鼠标悬停在项目的.h文件中的#include "extra.h" ,我总会得到一个弹出窗口“extra.h:没有这样的文件或目录”。

In KDevelop there was no problem and also qmake gets it. 在KDevelop中没有问题,qmake也得到了它。 What's the problem of the Creator (I'm using 2.8, and also tried 3.0) 造物主的问题是什么(我使用2.8,也试过3.0)

Any help greatly appreciated :-) 任何帮助非常感谢:-)

Konrad 康拉德


EDIT: I just realized, that the whole Qt framework isn't recognized by qt-creator as well. 编辑:我刚刚意识到,整个Qt框架也不被qt-creator识别。 When I type #include " the headers suggested by auto-completion are all located either in "/usr/include" or the project directory. For example I even can't do #include <QtGui> . 当我输入#include "自动完成建议的标题都位于”/ usr / include“或项目目录中。例如,我甚至不能做#include <QtGui>

what might be the problem here? 这可能是什么问题?


EDIT2: The project file also includes gui.pri and local.pri which are used by several other projects as well. EDIT2:项目文件还包括gui.pri和local.pri,它们也被其他几个项目使用。 I tried to compress the files a bit - it still compiles without problems. 我尝试压缩文件 - 它仍然编译没有问题。

actual project file located in "dir0/programs/us_convert" 实际项目文件位于“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 located in "dir0/" 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 ..
}

And local.pri, also located in "dir0/" 而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

}

I use premake and make to build my projects and QtCreator as IDE. 我使用premake和make来构建我的项目,并使用QtCreator作为IDE。 I had the same problem as you, using the header-only Library GLM. 我使用仅限标题的库GLM遇到了与您相同的问题。 My source code containded the following line: #include <glm/glm.hpp> . 我的源代码包含以下行: #include <glm/glm.hpp> It compiled without errors, but QT-Creator couldn't find the file, so I was not able to jump to it or functions it contains by holding CTRL and clicking on some function the library provided. 它编译时没有错误,但是QT-Creator无法找到该文件,因此我无法通过按住CTRL并单击库提供的某些功能来跳转到它或包含的函数。

In my project folder ther is a file called "Tree.includes", where "Tree" is the name of my QT-Creator project. 在我的项目文件夹中,ther是一个名为“Tree.includes”的文件,其中“Tree”是我的QT-Creator项目的名称。 I had to add the path to the library I use ther and it worked. 我不得不添加我使用的库的路径,它工作。

usedLibraries/glm/

My "Tree.includes" file looks like this: 我的“Tree.includes”文件如下所示:

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

My project folder lookes like this: 我的项目文件夹看起来像这样:

.
├── 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

I know my answer is late, but I had the same problem and there was no solution in tons of different posts, but then I found a solution, which worked for me: 我知道我的答案很晚,但是我遇到了同样的问题,并且在大量不同的帖子中没有解决方案,但后来我找到了一个适合我的解决方案:

You have to add the module you are using in your .pro file: 您必须在.pro文件中添加正在使用的模块:

For example, I wanted to use the #include<QtSql> module, but nothing worked. 例如,我想使用#include<QtSql>模块,但没有任何效果。 The compiler did not find this file. 编译器找不到此文件。 I found out that I was able to #include<QtSql/QSqlDatabase> (and all types which are declared in QtSql) however, but then I got an "undefined reference" error. 我发现我能够#include<QtSql/QSqlDatabase> (以及在QtSql中声明的所有类型)但是,我得到了一个"undefined reference"错误。


The Solution: You have to add the module you are using in you .pro file, in the following line: 解决方案:您必须在以下行中添加您在.pro文件中使用的模块:

QT = core gui

(This is how it looked by default for me) This is how it looks now for me and how it worked for me: (这是默认情况下我的样子)这就是我现在的样子以及它对我有用的方式:

QT = core gui sql

Hope this helps somebody else who has got the same issues. 希望这有助于其他有同样问题的人。


This worked on Windows as well as on Ubuntu! 这适用于Windows以及Ubuntu!

You should include the HEADERS also in the .pro file. 您还应该在.pro文件中包含HEADERS。

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

After doing this, save your project, let it parse. 执行此操作后,保存您的项目,让它解析。 Then delete your existing build folder (do not just clean), and then try to re-build. 然后删除现有的构建文件夹(不要只是清理),然后尝试重新构建。

i had same problem my problem was an empty line between headers and source : 我有同样的问题我的问题是标题和来源之间的空行:

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

i changed it to this : 我改成了这个:

INCLUDEPATH += $$PWD

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM