Почему Qt Creator не считает включенными заголовки включенными путями - даже если qmake может их найти

Я присоединился к уже существующему (opensource-) проекту Qt 4, чтобы добавить некоторые функции. Проект компилируется и отлично работает на Linux Slackware с Qt 4.8.5. В качестве IDE я сначала использовал KDevelop (поставляется с Slackware), но файлы проекта Qt не поддерживаются в KDevelop (поскольку в основном он использует cmake, мне пришлось использовать make файл для импорта проекта). Теперь я хочу переключиться на 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)

Любая помощь очень ценится: -)

Конрад


EDIT: Я просто понял, что вся основа 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

}

Ответ 1

Я использую premake и создаю свои проекты, а QtCreator - как IDE. У меня была такая же проблема, как и у вас, используя библиотеку GLM с заголовком. Мой исходный код содержал следующую строку: #include <glm/glm.hpp>. Он скомпилирован без ошибок, но QT-Creator не смог найти файл, поэтому я не смог его перескакивать или его функции содержал, удерживая CTRL и нажав на некоторую функцию, предоставленную библиотекой.

В моей папке проекта ther - это файл с названием "Tree.includes", где "Tree" - это имя моего проекта QT-Creator. Мне пришлось добавить путь к библиотеке, в которой я использую ther, и это сработало.

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

Ответ 2

Я знаю, что мой ответ задерживается, но у меня была такая же проблема, и в тоннах разных сообщений не было решения, но потом я нашел решение, которое сработало для меня:

Вам нужно добавить модуль, который вы используете в вашем файле .pro:

Например, я хотел использовать модуль #include<QtSql>, но ничего не получилось. Компилятор не нашел этот файл. Я узнал, что мне удалось #include<QtSql/QSqlDatabase> (и все типы, объявленные в QtSql), но затем я получил ошибку "undefined reference".


Решение.. Вы должны добавить модуль, который вы используете в файле .pro, в следующей строке:

QT = core gui

(Вот как он выглядел по умолчанию для меня) Вот как это выглядит теперь для меня и как это сработало для меня:

QT = core gui sql

Надеюсь, это поможет кому-то другому, у кого есть те же проблемы.


Это работало как на Windows, так и на Ubuntu!

Ответ 3

Вы должны включить HEADERS также в файл .pro.

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

После этого сохраните свой проект, пусть он разобратся. Затем удалите существующую папку сборки (не просто очистите), а затем попробуйте перестроить.

Ответ 4

у меня была та же проблема, моя проблема была пустой строкой между заголовками и источником:

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

я изменил это на это:

INCLUDEPATH += $$PWD

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