Не удаётся откомпилировать пример в консоли.



  • Доброго времени суток.

    Ubuntu 12.10 x86; Qt 5.0

    Изучаю Qt по книге Марка Саммерфилда "Qt 4: программирование GUI на C++". Установил "Qt 5.0.2 for Linux 64-bit (394 MB)":http://qt-project.org/downloads (в каталог /home/bush/Qt5.0.2). В файл .profile добавил такие строки:

    PATH="/home/bush/Qt5.0.2/5.0.2/gcc_64/bin:$PATH"
    export PATH

    На компакт-диске указанной книги имеются примеры исходных кодов. Копирую на локальный диск самый первый ("Hello Qt!") и пытаюсь откомпилировать его средствами командной строки... Однако мне это не удаётся:

    bush@host-nix:~/Qt-projects$ cd hello/
    bush@host-nix:~/Qt-projects/hello$ qmake -project
    bush@host-nix:~/Qt-projects/hello$ qmake hello.pro
    bush@host-nix:~/Qt-projects/hello$ make
    g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I../../Qt5.0.2/5.0.2/gcc_64/mkspecs/linux-g++-64 -I. -I. -I../../Qt5.0.2/5.0.2/gcc_64/include -I../../Qt5.0.2/5.0.2/gcc_64/include/QtGui -I../../Qt5.0.2/5.0.2/gcc_64/include/QtCore -I. -o hello.o hello.cpp
    hello.cpp:1:24: фатальная ошибка: QApplication: Нет такого файла или каталога
    компиляция прервана.
    make: *** [hello.o] Ошибка 1

    В результате работы указанных выше команд, успешно создаются файлы hello.pro и Makefile, но на этом всё и заканчивается, т.к. сама компиляция выдаёт ошибку...

    Вот то, что пытаюсь компилировать: "hello.zip":https://mega.co.nz/#!nE4EGJDY!Yz-kOHJ3ngdNJsFfO_N5UANhdekO6hdzPp8qum-foRg (3 KB), скачивать лучше через Chrome. В чём может быть дело?

    Спасибо.



  • В Qt5 виджеты вынесены в отдельный модуль.
    Добавьте в полученный .pro файл строчку:

    @greaterThan(QT_MAJOR_VERSION, 4): QT += widgets@

    А затем попробуйте пересобрать.

    И еще: вместе с Qt 5.0.2 у Вас должна была установиться замечательная IDE QtCreator (откройте .pro файл в ней).



  • Спасибо, заработало.

    Ранее я ожидал, что в состав Qt 5.0 будет включена соответствующая ей версия программы qmake и прочих инструментов. Поскольку pro-файл генерируется с помощью qmake -project, то полагал, что состав pro-файла автоматически формируется в соответствии с версией Qt 5.0, добавляя всё необходимое для её успешной компиляции.

    С уважением, Андрей.



  • Утилита справляется с задачей поиска исходных кодов и заполнения соответствующих переменных в файле проекта, но она не распознает какие зависимости (например модули Qt) нужны приложению. Модули core и gui всегда включались по-умолчанию, поэтому простые программы, которым нужны, как правило, только эти модули всегда собирались.
    С приходом Qt5 стандартные виджеты были вынесены из модуля gui в отдельный модуль widgets, поэтому некоторые проекты не собираются. Но, как Вы уже поняли, это легко исправить.



  • Да, спасибо. А где можно подробнее почитать о том, какие дополнительные изменения нужно внести в pro файл, чтобы уже имеющийся код (написанный под более старые версии Qt) можно было перекомпилировать под Qt 5.0? На данный момент времени я читаю "это":http://doc.crossplatform.ru/qt/4.5.0/qmake-manual.html. Но по запрашиваемым мною изменениям, которые следует вносить в pro файлы в случае использования Qt 5.0, информации пока не вижу.

    Дело в том, что для очередного примера, рассматриваемого в книге, добавления указанной вами выше строки кода оказалось недостаточно и ошибок вылезло огромнейшее количество.

    Пример простой (find.zip), выложил "здесь":https://mega.co.nz/#!TUQk3DRB!B0DD2UwHgTZPDw9bGaaxpn1JEIYfARVyCWvdyzypD3s.

    В ходе компиляции получаю такие ошибки (показываю лишь маленький фрагмент от общего количества):

    bush@host-nix:~$ cd Qt-projects/qt-book/chap02/find/
    bush@host-nix:~/Qt-projects/qt-book/chap02/find$ qmake -project
    bush@host-nix:~/Qt-projects/qt-book/chap02/find$ qmake find.pro
    bush@host-nix:~/Qt-projects/qt-book/chap02/find$ make
    g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../../Qt5.0.2/5.0.2/gcc_64/mkspecs/linux-g++-64 -I. -I. -I../../../../Qt5.0.2/5.0.2/gcc_64/include -I../../../../Qt5.0.2/5.0.2/gcc_64/include/QtWidgets -I../../../../Qt5.0.2/5.0.2/gcc_64/include/QtGui -I../../../../Qt5.0.2/5.0.2/gcc_64/include/QtCore -I. -o finddialog.o finddialog.cpp
    finddialog.cpp: In constructor «FindDialog::FindDialog(QWidget*)»:
    finddialog.cpp:8:41: ошибка: invalid use of incomplete type «class QLabel»
    In file included from finddialog.cpp:3:0:
    finddialog.h:7:7: ошибка: forward declaration of «class QLabel»
    finddialog.cpp:9:20: ошибка: invalid use of incomplete type «class QLineEdit»
    In file included from finddialog.cpp:3:0:
    finddialog.h:8:7: ошибка: forward declaration of «class QLineEdit»
    finddialog.cpp:10:10: ошибка: invalid use of incomplete type «class QLabel»
    In file included from finddialog.cpp:3:0:
    finddialog.h:7:7: ошибка: forward declaration of «class QLabel»
    finddialog.cpp:12:51: ошибка: invalid use of incomplete type «class QCheckBox»
    In file included from finddialog.cpp:3:0:



  • В документации Qt5 есть пример портирования приложени "Porting C++ Applications to Qt 5":http://qt-project.org/doc/qt-5.0/qtdoc/portingcppapp.html.

    Чтобы этот пример ожил с Qt5 добавьте в начало finddialog.cpp:
    @
    #include <QtGui>
    // Виджеты вынесенные из gui модуля (QLabel и т.п.)
    #if QT_VERSION >= 0x050000
    #include <QtWidgets>
    #endif
    @

    А вообще, я бы посоветовал для упрощения изучения по книге заточенной под Qt4 поставить Qt4 и не тратить силы на портирование примеров.

    @
    sudo apt-get install qt-sdk
    @

    Затем убедитесь, что в QtCreator сконфигурирован соответствующий kit для 4-ки и собирайте примеры из книги без лишних мучений.



  • Благодарю за помощь. Да, пожалуй я так и сделаю - удалю Qt 5.0 и поставлю Qt 4. Только возникает сразу такой вопрос: если я поставлю Qt 4.8, то могут ли у меня возникнуть какие-то аналогичные проблемы по отношению к коду, ориентированному на Qt 4.3? В крайнем случае, я конечно же могу установить версию 4.3, описываемую в книге.



  • Не нужно удалять Qt5. Можно писать приложения которые будут работать как с 4-кой, так и с 5-кой. И делать это можно одновременно. Проблем не будет.
    На машине может быть установлено несколько разных версий Qt.
    А что касается Qt 4.8 или Qt 4.3 и прочие Qt 4.x то маловероятно, что будет заметна разница.



  • Спасибо. Правда я уже успел удалить Qt 5 и поставить Qt 4. :) По опыту помню, что применительно к некоторым приложениям важно, чтобы их установка происходила в порядке старшинства, иначе в работе могут возникнуть проблемы. Я сталкивался с актуальностью этого для таких приложений как MS Visual Studio и AutoCAD. Поэтому решил не рисковать и удалить Qt 5. Возможно в данном случае никаких проблем и не возникло бы, но перестраховался...

    Благодарю за помощь!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.