it-swarm.com.de

Warum findet Qt Creator keine eingebundenen Header in eingeschlossenen Pfaden - auch wenn sie von qmake gefunden werden kann

Ich bin einem bereits bestehenden (OpenSource-) Qt 4-Projekt beigetreten, um einige Funktionen hinzuzufügen. Das Projekt wird unter Linux Slackware mit Qt 4.8.5 kompiliert und läuft einwandfrei. Als IDE habe ich zum ersten Mal KDevelop verwendet (wird mit Slackware geliefert), aber Qt-Projektdateien werden in KDevelop nicht unterstützt (da es hauptsächlich cmake verwendet, musste ich das Makefile zum Importieren des Projekts verwenden). Jetzt möchte ich zu Qt Creator wechseln, aber Header-Dateien in enthaltenen (relativen) Pfaden werden nicht erkannt. Beispielsweise befindet sich die Projektdatei in "dir0/programmes/prog1/prog1.pro" und einige zusätzliche Header befinden sich in "dir0/gui/extra.h". "dir0/gui" wird durch die Zeile INCLUDEPATH += ../../gui in der Projektdatei zum Suchpfad hinzugefügt. Wenn ich über #include "extra.h" in einer .h-Datei des Projekts schwebe, bekomme ich immer ein Popup mit der Aufschrift "extra.h: Keine solche Datei oder Verzeichnis".

In KDevelop gab es kein Problem und auch qmake bekommt es. Was ist das Problem des Erstellers (ich verwende 2.8 und habe es auch mit 3.0 versucht)

Jede Hilfe sehr geschätzt :-)

Konrad


EDIT: Ich habe gerade festgestellt, dass das gesamte Qt-Framework auch von qt-creator nicht erkannt wird. Wenn ich #include " eingebe, befinden sich die von der automatischen Vervollständigung vorgeschlagenen Header entweder in "/ usr/include" oder im Projektverzeichnis. Zum Beispiel kann ich #include <QtGui> gar nicht machen.

was könnte das Problem sein?


EDIT2: Die Projektdatei enthält auch gui.pri und local.pri, die auch von mehreren anderen Projekten verwendet werden. Ich habe versucht, die Dateien ein wenig zu komprimieren - es wird immer noch ohne Probleme kompiliert.

aktuelle Projektdatei in "dir0/programme/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 in "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 ..
}

Und local.pri, auch in "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

Ich weiß, dass meine Antwort zu spät ist, aber ich hatte das gleiche Problem und es gab keine Lösung in Tonnen verschiedener Posts, aber dann fand ich eine Lösung, die für mich funktionierte:

Sie müssen das von Ihnen verwendete Modul in Ihre .pro-Datei einfügen:

Ich wollte zum Beispiel das #include<QtSql>-Modul verwenden, aber es hat nichts funktioniert. Der Compiler hat diese Datei nicht gefunden. Ich fand heraus, dass ich #include<QtSql/QSqlDatabase> (und alle Typen, die in QtSql deklariert sind) jedoch konnte, aber dann bekam ich einen "undefined reference"-Fehler.


Die Lösung: Sie müssen das Modul, das Sie in Ihrer .pro-Datei verwenden, in der folgenden Zeile hinzufügen:

QT = core gui

(So ​​sah es standardmäßig für mich aus.) So sieht es jetzt für mich aus und wie es für mich funktioniert hat:

QT = core gui sql

Ich hoffe, das hilft jemand anderem, der die gleichen Probleme hat.


Dies funktionierte sowohl unter Windows als auch unter Ubuntu!

2
ElectRocnic

Ich benutze Premake und mache meine Projekte und QtCreator als IDE. Ich hatte das gleiche Problem wie Sie, als ich die Bibliothek GLM ..__ verwendet habe. Mein Quellcode enthielt die folgende Zeile: #include <glm/glm.hpp>. Es wurde ohne Fehler kompiliert, aber QT-Creator konnte die Datei nicht finden. Daher konnte ich nicht zu der Datei oder den darin enthaltenen Funktionen springen, indem Sie die STRG-Taste gedrückt halten und auf eine Funktion der Bibliothek klicken.

In meinem Projektordner befindet sich eine Datei mit dem Namen "Tree.includes", wobei "Tree" der Name meines QT-Creator-Projekts ist. Ich musste den Pfad zu der Bibliothek hinzufügen, die ich benutze, und es hat funktioniert.

usedLibraries/glm/

Meine "Tree.includes" -Datei sieht folgendermaßen aus:

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

Mein Projektordner sieht folgendermaßen aus:

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

Sie sollten die HEADERS auch in die .pro-Datei aufnehmen.

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

Speichern Sie anschließend Ihr Projekt, und lassen Sie es analysieren. Dann delete your bestehender Build-Ordner (nicht einfach bereinigen) und dann versuchen, neu zu erstellen.

0
Abhishek Bansal