Ошибка QApplication: нет такого файла или каталога - PullRequest
50 голосов
/ 25 января 2012

Я установил C ++ SDK с Qt, но когда я пытаюсь скомпилировать код, связывающий QApplication, он выдает мне ошибку:

Error QApplication: no such file or directory

Как мне связать эти библиотеки?Я искал в каталогах, и там есть файл с именем QApplication.h;Поэтому я попытался связать его с -I (связывая каталог), но он все еще давал мне эту ошибку.

Ответы [ 10 ]

97 голосов
/ 03 января 2013

В Qt 5 теперь вам нужно добавить widgets к переменной QT qmake (в вашем файле MyProject.pro).

 QT += widgets
53 голосов
/ 02 февраля 2012

Для начала, ошибка QApplication: no such file or directory означает, что ваш компилятор не смог найти этот заголовок.Это не связано с процессом связывания, как вы упомянули в вопросе.

Флаг -I (прописные буквы i ) используется для указания каталога include (заголовки) (чтоВы должны сделать), в то время как флаг -L используется для указания каталога библиотеки.Флаг -l (строчная буква L) используется для связи вашего приложения с указанной библиотекой.

Но вы можете использовать Qt в своих интересах : Qt имеет систему сборки с именем qmake , который делает вещи проще.Например, когда я хочу скомпилировать main.cpp , я создаю файл main.pro .Допустим, в образовательных целях этот исходный код является простым проектом, в котором используются только QApplication и QDeclarativeView.Подходящим файлом .pro будет:

TEMPLATE += app
QT += gui declarative
SOURCES += main.cpp

Затем выполните qmake внутри этого каталога, чтобы создать Makefile, который будет использоваться для компиляции вашего приложения, и, наконец, выполнить make, чтобы выполнить работу.

В моей системе это make выводит:

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

Примечание: я установил Qt в другой каталог -> /opt/qt_47x

Редактировать: Qt 5.x и более поздние версии

Добавить QT += widgets в файл .pro и решить эту проблему.

29 голосов
/ 17 апреля 2013

Для QT 5

Шаг 1: .pro (в файле pro добавить эти 2 строки)

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

Step2: В main.cpp заменить код:

#include <QtGui/QApplication> 

на:

#include <QApplication>
14 голосов
/ 25 января 2012

Похоже, у вас не установлены библиотеки разработки. Установите их, используя:

sudo apt-get install libqt4-dev

Как вы сказали в комментариях, что они у вас установлены, просто переустановите их. Сейчас. чтобы обновить базу данных локации, введите команду $sudo updatedb

Затем $locate QApplication, чтобы проверить, что теперь у вас установлен файл заголовка.

Теперь перейдите в папку, в которой у вас есть код, и введите эти команды

qmake -project
qmake
make

Затем вы можете найти созданный двоичный файл.

Кроме того, вы можете использовать Qt Creator, если вам нужен графический интерфейс.

4 голосов
/ 01 февраля 2012

Пожалуйста, убедитесь, что версия qmake, которую вы используете, соответствует версии QT, которую вы хотите использовать.

Чтобы быть уверенным, вы можете просто запустить:

$qmake -v

Ваша проблема, кажется, является признаком конфликта версий между QT 3 и 4, как можно увидеть здесь:

http://lists.trolltech.com/qt4-preview-feedback/2005-11/thread00013-0.html

Чтобы это исправить, вы можете либо удалить старую установку QT, либо конкретно указать qmake-qt4 в вашем Makefile.

3 голосов
/ 28 марта 2013

В Qt5 вы должны использовать QtWidgets вместо QtGui

#include <QtGui/QComboBox>     // incorrect in QT5
#include <QtWidgets/QComboBox>    // correct in QT5

Или

#include <QtGui/QStringListModel>    // incorrect in QT5
#include <QtCore/QStringListModel>    // correct in QT5
1 голос
/ 16 апреля 2016

Вы должны добавить виджеты QT + = в файл .pro перед первым выполнением, если вы выполняете перед добавлением этой строки, она не будет работать, поэтому вам нужно начать создание файла с самого начала.

0 голосов
/ 11 октября 2016

Вы можете изменить версию сборки. Например, я попробовал QT 5.6.1, но это не сработало. Тогда я попробовал QT 5.7.0. Так что это сработало, Удачи! :)

0 голосов
/ 03 февраля 2012

Убедитесь, что у вас есть qmake на вашем пути (который qmake), и что он работает (qmake -v) (Если вам нужно убить его с помощью ctr-c, тогда что-то не так с вашей средой).

Затем следуйте этому: http://developer.qt.nokia.com/doc/qt-4.8/gettingstartedqt.html

0 голосов
/ 01 февраля 2012

Я предлагаю вам обновить SDK, начать новый проект и перекомпилировать все, что у вас есть.Кажется, у вас есть некоторые внутренние ошибки программы.Или вам не хватает посылки.

И, конечно, делайте то, что сказал Абдижик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...