web-dev-qa-db-fra.com

Pourquoi Qt Creator ne trouve-t-il pas les en-têtes inclus dans les chemins inclus - même si qmake est capable de les trouver?

J'ai rejoint un projet déjà existant (opensource) Qt 4 pour ajouter des fonctionnalités. Le projet compile et fonctionne parfaitement sur Linux Slackware avec Qt 4.8.5. Comme IDE], j'ai d'abord utilisé KDevelop (fourni avec Slackware), mais les fichiers de projet Qt ne sont pas pris en charge dans KDevelop (puisqu'il utilise principalement cmake, j'ai dû utiliser le fichier makefile pour importer le projet). Maintenant, je veux passer à Qt Creator, mais les fichiers d'en-tête dans les chemins inclus (relatifs) ne sont pas reconnus. Par exemple, le fichier de projet est dans "dir0/programmes/prog1/prog1.pro" et certains en-têtes supplémentaires sont dans "dir0/gui/extra.h". "dir0/gui" est ajouté au chemin de recherche par la ligne INCLUDEPATH += ../../gui dans le fichier de projet. Si je survole le #include "extra.h" dans un fichier .h du projet, une fenêtre contextuelle indiquant "extra.h: aucun fichier ou répertoire de ce type" n'apparaît.

Dans KDevelop, il n'y avait pas de problème et qmake l'obtient également. Quel est le problème du Créateur (J'utilise 2.8 et j'ai également essayé la version 3.0)

Toute aide grandement appréciée :-)

Konrad


EDIT: Je viens de me rendre compte que Qt-Creator ne reconnaît pas non plus tout le framework Qt. Lorsque je tape #include ", les en-têtes suggérés par saisie semi-automatique se trouvent tous dans "/ usr/include" ou dans le répertoire du projet. Par exemple, je ne peux même pas faire #include <QtGui>.

quel pourrait être le problème ici?


EDIT2: le fichier de projet inclut également gui.pri et local.pri, qui sont également utilisés par plusieurs autres projets. J'ai essayé de compresser les fichiers un peu - il compile toujours sans problèmes.

fichier de projet actuel situé dans "dir0/programmes/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 situé dans "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 ..
}

Et local.pri, également situé dans "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

}
11
user3122343

Je sais que ma réponse est tardive, mais j'ai eu le même problème et il n'y avait pas de solution dans des tonnes de postes différents, mais j'ai ensuite trouvé une solution qui a fonctionné pour moi:

Vous devez ajouter le module que vous utilisez dans votre fichier .pro:

Par exemple, je voulais utiliser le module #include<QtSql>, mais rien ne fonctionnait .. Le compilateur n'a pas trouvé ce fichier. J'ai découvert que j'étais capable de #include<QtSql/QSqlDatabase> (et de tous les types déclarés dans QtSql) cependant, mais j'ai eu une erreur "undefined reference".


La solution: Vous devez ajouter le module que vous utilisez dans votre fichier .pro, à la ligne suivante:

QT = core gui

(Voici à quoi cela ressemblait par défaut pour moi) Voici comment cela se présente maintenant pour moi et comment cela a fonctionné pour moi:

QT = core gui sql

J'espère que cela aidera quelqu'un qui a les mêmes problèmes.


Cela a fonctionné à la fois sur Windows et sur Ubuntu!

2
ElectRocnic

J'utilise premake et make pour construire mes projets et QtCreator en tant qu'IDE. J'ai eu le même problème que vous, en utilisant la bibliothèque GLM ..__ en-tête uniquement. Mon code source contenait la ligne suivante: #include <glm/glm.hpp>. Il a été compilé sans erreur, mais QT-Creator n’a pas pu trouver le fichier. Je n’étais donc pas en mesure d’y accéder directement ni aux fonctions qu’il contient en maintenant CTRL et en cliquant sur une fonction de la bibliothèque fournie.

Dans mon dossier de projet, il y a un fichier appelé "Tree.includes", où "Tree" est le nom de mon projet QT-Creator. J'ai dû ajouter le chemin d'accès à la bibliothèque que j'utilise et cela a fonctionné.

usedLibraries/glm/

Mon fichier "Tree.includes" ressemble à ceci:

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

Mon dossier de projet ressemble à ceci:

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

Vous devez également inclure les HEADERS dans le fichier .pro.

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

Après cela, enregistrez votre projet, laissez-le analyser. Puis delete votre dossier de construction existant (ne pas simplement nettoyer), puis essayez de le reconstruire.

0
Abhishek Bansal