J'ai installé le SDK C++ sous Qt, mais lorsque j'essaie de compiler un code liant QApplication, cela me donne l'erreur suivante:
Error QApplication: no such file or directory
Comment lier ces bibliothèques? J'ai cherché dans les répertoires et il y a un fichier nommé QApplication.h; Alors j'ai essayé de le lier avec -I (lier le répertoire) mais il me donnait toujours cette erreur.
Pour commencer, l'erreur QApplication: no such file or directory
_ signifie que votre compilateur n'a pas pu trouver cet en-tête. Ce n'est pas lié au processus de création de liens, comme vous l'avez mentionné dans la question.
Le -I
flag (majuscule i) est utilisé pour spécifier le répertoire include (en-têtes) (ce que vous devez faire), tandis que le -L
drapeau est utilisé pour spécifier le répertoire des bibliothèques. Le -l
flag (L minuscule) permet de lier votre application à une bibliothèque spécifiée.
Mais vous pouvez tilisez Qt à votre avantage: Qt a un système de construction nommé qmake qui facilite les choses. Par exemple, lorsque je veux compiler main.cpp , je crée un fichier main.pro. Supposons, à des fins pédagogiques, que ce code source est un projet simple qui utilise uniquement QApplication
et QDeclarativeView
. Un fichier approprié . Pro serait:
TEMPLATE += app
QT += gui declarative
SOURCES += main.cpp
Ensuite, exécutez le qmake
à l'intérieur de ce répertoire pour créer le Makefile qui sera utilisé pour compiler votre application, puis exécutez make
pour terminer le travail.
Sur mon système, ceci make
génère:
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/qt_47x/mkspecs/linux-g++ -I. -I/opt/qt_47x/include/QtCore -I/opt/qt_47x/include/QtGui -I/opt/qt_47x/include/QtDeclarative -I/opt/qt_47x/include -I/usr/X11R6/include -I. -o main.o main.cpp
g++ -Wl,-O1 -Wl,-rpath,/opt/qt_47x/lib -o main main.o -L/opt/qt_47x/lib -L/usr/X11R6/lib -lQtDeclarative -L/opt/qt_47x/lib -lQtScript -lQtSvg -L/usr/X11R6/lib -lQtSql -lQtXmlPatterns -lQtNetwork -lQtGui -lQtCore -lpthread
Note: J'ai installé Qt dans un autre répertoire -> /opt/qt_47x
Edit: Qt 5.x et versions ultérieures
Ajouter QT += widgets
dans le fichier .pro et résolvez ce problème.
Dans Qt 5, vous devez maintenant ajouter widgets
à la variable QT
qmake (dans votre MyProject.pro
fichier).
QT += widgets
pour QT 5
Step1:.pro
(dans le fichier pro, ajoutez ces 2 lignes)
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
Step2: Dans main.cpp
remplacer le code:
#include <QtGui/QApplication>
avec:
#include <QApplication>
On dirait que les bibliothèques de développement ne sont pas installées. Installez-les en utilisant:
Sudo apt-get install libqt4-dev
Comme vous l'avez dit dans les commentaires que vous les avez installés, il suffit de le réinstaller. À présent. pour mettre à jour la base de données de la localisation, lancez cette commande $Sudo updatedb
Ensuite $locate QApplication
pour vérifier que le fichier d’en-tête est maintenant installé.
Maintenant, allez dans le dossier où vous avez le code et tapez ces commandes
qmake -project
qmake
make
Ensuite, vous pouvez trouver le binaire créé.
Vous pouvez également utiliser Qt Creator si vous souhaitez utiliser l'interface graphique.
Voir la documentation officielle pour plus d'informations. http://developer.qt.nokia.com/doc/qt-4.8/gettingstartedqt.html
Pour apprendre à utiliser Qt Creator, utilisez http://doc.qt.nokia.com/qtcreator-2.2/creator-qml-application.html
Assurez-vous que la version de qmake que vous utilisez correspond à la version de QT que vous souhaitez utiliser.
Pour être sûr, vous pouvez simplement lancer:
$qmake -v
Votre problème semble être le symptôme d'un conflit de version entre QT 3 et 4, comme on peut le voir ici:
http://lists.trolltech.com/qt4-preview-feedback/2005-11/thread00013-0.html
Pour résoudre ce problème, vous pouvez soit supprimer votre ancienne installation de QT, soit indiquer spécifiquement qmake-qt4 dans votre Makefile.
Dans Qt5, vous devriez utiliser QtWidgets
au lieu de QtGui
#include <QtGui/QComboBox> // incorrect in QT5
#include <QtWidgets/QComboBox> // correct in QT5
Ou
#include <QtGui/QStringListModel> // incorrect in QT5
#include <QtCore/QStringListModel> // correct in QT5
vous devez ajouter QT + = aux widgets dans le fichier .pro avant la première exécution. Si vous exécutez avant d'ajouter cette ligne, cela ne fonctionnera pas. Vous devez donc commencer la création du fichier à partir du début.
Je vous suggère de mettre à jour votre SDK, de démarrer un nouveau projet et de recompiler tout ce que vous avez. Il semble que vous ayez des erreurs de programme internes. Ou il vous manque un colis.
Et bien sûr, fais ce qu'Abdijeek a dit.
Assurez-vous que vous avez qmake dans votre chemin (qui qmake) et que cela fonctionne (qmake -v) (SI vous devez le tuer avec ctr-c, alors il y a quelque chose qui ne va pas dans votre environnement).
Suivez ensuite ceci: http://developer.qt.nokia.com/doc/qt-4.8/gettingstartedqt.html
Vous pouvez changer de version versiyon.Par exemple, j’ai essayé QT 5.6.1, mais cela n’a pas fonctionné. Alors, j’ai essayé QT 5.7.0. :)