web-dev-qa-db-fra.com

Erreur QApplication: aucun fichier ni répertoire de ce type

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.

52
Ramy Al Zuhouri

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.

55
karlphillip

Dans Qt 5, vous devez maintenant ajouter widgets à la variable QT qmake (dans votre MyProject.pro fichier).

 QT += widgets
100
Timmmm

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>
29
Jassim Talat

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.

14
Abhijeet Rastogi

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.

4
Loomchild

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
3
AliS

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.

1

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.

0
Denonth

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

0
cstream

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. :)

0
teresa