Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ioann.sys от Июль 28, 2014, 16:29



Название: Не работает Hello World!
Отправлено: ioann.sys от Июль 28, 2014, 16:29
Всем привет!
Только начал изучать Qt. Скачал Qt 5.3.1 для Windows (MinGW). Читаю книжку Шлее 2012 г. выпуска.


В QtCreator создал новоё пустоё приложение, добавил новый файл main.cpp, в файле 1.pro (1 - это название проекта) появилась запись SOURCES += main.cpp \
Далее, main.cpp содержит код из учебника:

Код
#include <QtGui>
 
int main(int argc, char** argv)
{
   QApplication app(argc, argv);
   QLabel lbl("Hello World!!!");
   lbl.show();
 
   return app.exec();
}
 

Но, к сожалению, ничего  не работает :(

Цитировать
D:\qt\prj\NULL\main.cpp:6: ошибка: variable 'QApplication app' has initializer but incomplete type
     QApplication app(argc, argv);
D:\qt\prj\NULL\main.cpp:12: предупреждение: control reaches end of non-void function [-Wreturn-type]
 }
 ^
                      ^



Название: Re: Не работает Hello World!
Отправлено: kambala от Июль 28, 2014, 16:58
читай книжку по Qt 5 или поставь себе Qt 4 чтобы в будущем путаницы не возникало.

твой фикс: #include <QtWidgets> и в .pro файл допиши QT += widgets


Название: Re: Не работает Hello World!
Отправлено: ioann.sys от Июль 28, 2014, 17:16
И в правду, помогло!!! Спасибо большое) :3

Я так понял, что в Qt5, вместо QtGui, теперь подключают QtWidgets. Правильно?
Где можно почитать об Qt5? Стоит его вообще курить, или лучше использовать Qt4.8?

Еще раз спасибо.


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 28, 2014, 17:41
Qt4 проще, меньше размер программы+dll.
Qt5 навороченнее, больше размер программы + dll, имеется OpenGl, Qml, куча всяких новых фишек + поддержка 11 стандарта.

Я остановился на Qt4. Пробовал пятёрку - не понравилось из-за кучи зависимых dll. Я их возможности не пользую, а они всё равно нужны :/


Название: Re: Не работает Hello World!
Отправлено: Igors от Июль 28, 2014, 18:43
Где можно почитать об Qt5? Стоит его вообще курить, или лучше использовать Qt4.8?
Единственным оправданием использования старой версии может быть старый код который непросто перевести. А иначе и думать нечего, новее = лучше


Название: Re: Не работает Hello World!
Отправлено: ioann.sys от Июль 28, 2014, 18:49
Согласен, но таким образом, для меня появляются трудности - это англ. яз. Хотя, я хз, на подсознании, читая мануал, какую-то часть улавливаю))


Название: Re: Не работает Hello World!
Отправлено: alex312 от Июль 28, 2014, 19:06
Согласен, но таким образом, для меня появляются трудности - это англ. яз. Хотя, я хз, на подсознании, читая мануал, какую-то часть улавливаю))
Никакая книга вас не спасет от чтения документации. Поэтому знание английского на уровне чтения документации надо тоже вырабатывать.
А так, читайте книжку про Qt4 и документацию про отличия Qt5 (их там немного).
http://qt-project.org/doc/qt-5/portingguide.html
http://qt-project.org/doc/qt-5/qt5-intro.html


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 28, 2014, 19:07
Новее != лучше.

Новее = больше возможностей.

Четвёрка нормально вылизана от ошибок и имеет свои преимущества :) В том числе в количестве готовых решений :)


Название: Re: Не работает Hello World!
Отправлено: Alexu007 от Июль 28, 2014, 21:51
В QtCreator создал новоё пустоё приложение, добавил новый файл main.cpp, в файле 1.pro (1 - это название проекта) появилась запись SOURCES += main.cpp \
Я запускаю в четвёрке новый проект (выбираю класс widget), создаётся пустая форма и файлы main.cpp, widget.cpp и widget.h - создаются автоматически. Эту форму пустую уже можно запускать на выполнение без какого-либо кода - и она отработает. А чтобы нарисовать на форме "Hello word", достаточно мышкой притащить на форму метку, и в свойствах метки сделать соотв. надпись. - и снова ни одной строчки кода.

Другие файлы тож наверное создаются автоматически, но я в них никогда не лазил, необходимости такой не возникало.

В пятёрке тоже можно так, или требуются дополнительные телодвижения типо записи чего-либо в файл .pro и т.п.?



Название: Re: Не работает Hello World!
Отправлено: gil9red от Июль 28, 2014, 22:17
В QtCreator создал новоё пустоё приложение, добавил новый файл main.cpp, в файле 1.pro (1 - это название проекта) появилась запись SOURCES += main.cpp \
Я запускаю в четвёрке новый проект (выбираю класс widget), создаётся пустая форма и файлы main.cpp, widget.cpp и widget.h - создаются автоматически. Эту форму пустую уже можно запускать на выполнение без какого-либо кода - и она отработает. А чтобы нарисовать на форме "Hello word", достаточно мышкой притащить на форму метку, и в свойствах метки сделать соотв. надпись. - и снова ни одной строчки кода.

Другие файлы тож наверное создаются автоматически, но я в них никогда не лазил, необходимости такой не возникало.

В пятёрке тоже можно так, или требуются дополнительные телодвижения типо записи чего-либо в файл .pro и т.п.?



В 5-й все также автоматизировано :)


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 28, 2014, 22:30
Мне чего в креаторе нехватает - так это скорости. Сменил тип проекта с отладки на релиз - и сиди жди себе секунд 5-8 пока он что то сделает. Что - непонятно. pro и всё остальное одинаково :D


Название: Re: Не работает Hello World!
Отправлено: ioann.sys от Июль 28, 2014, 22:30
Концепция C++, сделана так, что для каждого класса/функции/типа, есть свой заголовочный файл и его код, то есть файлы с расширением .h || .cpp. Например, такое простое приложение, как hello world "раздувать" на три файла, как-то не очень)) Приходилось дописывать в конце #include "main.moc" и тогда, всё работало.
Когда я начинаю писать программу, то сначала всё делаю в main.cpp. А потом, если функция/класс готов, то объявляю в заголовках и описываю в исходниках со всеми проверками #idndef... Мне так удобней :)


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 28, 2014, 23:28
Можете считать что разбиение сделано в честь хорошей манеры программирования :)


Название: Re: Не работает Hello World!
Отправлено: ioann.sys от Июль 29, 2014, 01:51
Так и есть.

Кстати, Alex312, спасибо за ссылки. Скажите пожалуйста, правильно-ли я понял следующее:
 - QtGui отвечает только за само рисование окон (поверхности), а QWidget - непосредственно и есть сами виджеты;
 - в первом случае, используется QtGuiApplication, а во втором, привычный QtApplication.

Всё верно?


Название: Re: Не работает Hello World!
Отправлено: gil9red от Июль 29, 2014, 07:24
Мне чего в креаторе нехватает - так это скорости. Сменил тип проекта с отладки на релиз - и сиди жди себе секунд 5-8 пока он что то сделает. Что - непонятно. pro и всё остальное одинаково :D

А *.pro файл и не должен меняться :) Креатор что-то с файлом сборки делает (мое предположение)


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 29, 2014, 09:12
Надо как нить посмотреть будет :D А то прям эта тема меня волнует :D


Название: Re: Не работает Hello World!
Отправлено: kambala от Июль 29, 2014, 09:29
Так и есть.

Кстати, Alex312, спасибо за ссылки. Скажите пожалуйста, правильно-ли я понял следующее:
 - QtGui отвечает только за само рисование окон (поверхности), а QWidget - непосредственно и есть сами виджеты;
 - в первом случае, используется QtGuiApplication, а во втором, привычный QtApplication.

Всё верно?
не все:
- в 5 QtGui отвечает за все, что связано с пользовательским интерфейсом за исключением виджетов (в 4 виджеты тоже в QtGui сидели)
- в 5 QApplication наследуется от QGuiApplication, который, в свою очередь, наследуется от QCoreApplication (в 4 было QApplication : QCoreApplication)
Мне чего в креаторе нехватает - так это скорости. Сменил тип проекта с отладки на релиз - и сиди жди себе секунд 5-8 пока он что то сделает. Что - непонятно. pro и всё остальное одинаково :D
А *.pro файл и не должен меняться :) Креатор что-то с файлом сборки делает (мое предположение)
он парсит .pro файл (там же можно задавать разные настройки в зависимости от режима)


Название: Re: Не работает Hello World!
Отправлено: OKTA от Июль 29, 2014, 10:03
А можно поставить build_all и не переключать  ;D


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 29, 2014, 10:13
Как можно парсить этот pro файл 3 секунды?
Код:
#-------------------------------------------------
#
# Project created by QtCreator 2014-07-29T10:36:00
#
#-------------------------------------------------

QT       += core gui

TARGET = untitled1
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui


Название: Re: Не работает Hello World!
Отправлено: kambala от Июль 29, 2014, 10:50
ответ на твой вопрос находится в исходниках креатора :)


Название: Re: Не работает Hello World!
Отправлено: Пантер от Июль 29, 2014, 10:59
Там же еще парсинг исходников идет.


Название: Re: Не работает Hello World!
Отправлено: OKTA от Июль 29, 2014, 21:45
Я готов простить эти секунды креатору в отличии от студии, которая плодит файлы в папке проекта, как бешеная крольчиха  ;D


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 29, 2014, 22:01
Эммм...
Должен вас оповестить что настройка директорий находится в свойствах проекта. Единственно что вы не можете поменять - наличие pch в папке с файлом sln. Всё остальное настраивается под вас :D

PS ещё 1 преимущество перед креатором. Можно хоть к черту на куличики компилить и релизить.


Название: Re: Не работает Hello World!
Отправлено: OKTA от Июль 29, 2014, 22:19
Там столько этих свойств, что без ящика водки как-то совсем неинтересно разбираться  ;D


Название: Re: Не работает Hello World!
Отправлено: Old от Июль 29, 2014, 22:25
PS ещё 1 преимущество перед креатором. Можно хоть к черту на куличики компилить и релизить.
А зачем вообще для релиза IDE?


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 29, 2014, 23:35
Чтоб было. Не стоит всё мерять "сложной" меркой. Я большинство программ "релизю" в IDE. Протестил, продебажил, зарелизил, отослал. Всё.


Название: Re: Не работает Hello World!
Отправлено: Пантер от Июль 30, 2014, 08:14
PS ещё 1 преимущество перед креатором. Можно хоть к черту на куличики компилить и релизить.
Это ты сейчас не прошадоу билд случаем?


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 30, 2014, 13:03
Нет, это я про qmake и его ограничения на сборку программы ниже корня исходников.


Название: Re: Не работает Hello World!
Отправлено: Пантер от Июль 30, 2014, 13:18
Нет, это я про qmake и его ограничения на сборку программы ниже корня исходников.
Эм. qmake умеет собирать где угодно.

Код:
[panter]/var/tmp/1=> qmake /media/work/program/archive/VirtualKeyboard/VirtualKeyboard.pro                 14:17 pts/1
[panter]/var/tmp/1=> make                                                                                  14:17 pts/1
/usr/bin/uic /media/work/program/archive/VirtualKeyboard/mainwindow.ui -o ui_mainwindow.h
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I/media/work/program/archive/VirtualKeyboard -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I/media/work/program/archive/VirtualKeyboard -I. -o main.o /media/work/program/archive/VirtualKeyboard/main.cpp
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I/media/work/program/archive/VirtualKeyboard -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I/media/work/program/archive/VirtualKeyboard -I. -o mainwindow.o /media/work/program/archive/VirtualKeyboard/mainwindow.cpp
/usr/bin/moc -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I/media/work/program/archive/VirtualKeyboard -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I/media/work/program/archive/VirtualKeyboard -I. /media/work/program/archive/VirtualKeyboard/mainwindow.h -o moc_mainwindow.cpp
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I/media/work/program/archive/VirtualKeyboard -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I/media/work/program/archive/VirtualKeyboard -I. -o moc_mainwindow.o moc_mainwindow.cpp
/usr/bin/rcc -name resources /media/work/program/archive/VirtualKeyboard/resources.qrc -o qrc_resources.cpp
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I/media/work/program/archive/VirtualKeyboard -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I/media/work/program/archive/VirtualKeyboard -I. -o qrc_resources.o qrc_resources.cpp
g++  -o VirtualKeyboard main.o mainwindow.o moc_mainwindow.o qrc_resources.o    -L/usr/lib64/qt4 -lQtGui -L/usr/lib64 -L/usr/lib64/qt4 -L/usr/X11R6/lib -lQtCore -lgthread-2.0 -lglib-2.0 -lpthread
{ test -n "" && DESTDIR="" || DESTDIR=.; } && test $(gdb --version | sed -e 's,[^0-9]\+\([0-9]\)\.\([0-9]\).*,\1\2,;q') -gt 72 && gdb --nx --batch --quiet -ex 'set confirm off' -ex "save gdb-index $DESTDIR" -ex quit 'VirtualKeyboard' && test -f VirtualKeyboard.gdb-index && objcopy --add-section '.gdb_index=VirtualKeyboard.gdb-index' --set-section-flags '.gdb_index=readonly' 'VirtualKeyboard' 'VirtualKeyboard' && rm -f VirtualKeyboard.gdb-index || true
[panter]/var/tmp/1=> lsf                                                                                   14:17 pts/1
total 2.4M
-rw-r--r-- 1 panter panter  11K июл 30 14:17 Makefile
-rwxr-xr-x 1 panter panter 540K июл 30 14:17 VirtualKeyboard*
-rw-r--r-- 1 panter panter 2.4K июл 30 14:17 moc_mainwindow.cpp
-rw-r--r-- 1 panter panter 910K июл 30 14:17 qrc_resources.cpp
-rw-r--r-- 1 panter panter 2.8K июл 30 14:17 ui_mainwindow.h
-rw-r--r-- 1 panter panter 183K июл 30 14:17 main.o
-rw-r--r-- 1 panter panter 347K июл 30 14:17 mainwindow.o
-rw-r--r-- 1 panter panter 195K июл 30 14:17 moc_mainwindow.o
-rw-r--r-- 1 panter panter 191K июл 30 14:17 qrc_resources.o
[panter]/var/tmp/1=>   


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 30, 2014, 13:24
Нууу, что сказать. QtCreator идущий с 5.3 не даёт собирать программу в каталоге ниже исходников. QMake выдаёт ошибку. За давностью попыток точно не помню какую.

PS даже тему создавал :)

update: ну если уточнить, то папка назначения сборки не может быть ниже каталога с pro файлом.


Название: Re: Не работает Hello World!
Отправлено: Пантер от Июль 30, 2014, 13:27
Нууу, что сказать. QtCreator идущий с 5.3 не даёт собирать программу в каталоге ниже исходников. QMake выдаёт ошибку. За давностью попыток точно не помню какую.

PS даже тему создавал :)

update: ну если уточнить, то папка назначения сборки не может быть ниже каталога с pro файлом.
А я из консоли всегда такое делаю, вот и не знаю. :)


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 30, 2014, 14:05
Всё могло измениться. Но интересовался я креатором недолго.

PS проверил, действительно этого ограничения больше нет. Видимо кого то тоже достало :D


Название: Re: Не работает Hello World!
Отправлено: Пантер от Июль 30, 2014, 14:08
Всё могло измениться. Но интересовался я креатором недолго.

PS проверил, действительно этого ограничения больше нет. Видимо кого то тоже достало :D
Мне Креатор тоже раньше не нравился, а потом допилили и он стал почти няшей.


Название: Re: Не работает Hello World!
Отправлено: Ginger_Ministrel от Июль 30, 2014, 16:21
А чем Криэйтор не няша?


Название: Re: Не работает Hello World!
Отправлено: Bepec от Июль 30, 2014, 16:26
http://www.prog.org.ru/topic_26985_0.html


Название: Re: Не работает Hello World!
Отправлено: Alexu007 от Август 03, 2014, 16:18
А чем Криэйтор не няша?
Это гуру пальцы гнут, а так конечно няша. Натаскал мышкой кнопок на форму - и коди-и-и-и...


Название: Re: Не работает Hello World!
Отправлено: lit-uriy от Август 03, 2014, 16:20
Натаскать виджетов на форму издавна можно и в Qt Designer-е.


Название: Re: Не работает Hello World!
Отправлено: Alexu007 от Август 03, 2014, 21:41
A-a-a я думал это одно и то же.