Russian Qt Forum

Qt => Общие вопросы => Тема начата: Account от Июль 18, 2009, 00:34



Название: Сборка и запуск
Отправлено: Account от Июль 18, 2009, 00:34
Создал новый консольный проект, привожу листинг main.cpp

Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <iostream.h>
#include <stdio.h>
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   cout<<"Hello Qt\n";
 
   getchar();
   //exit(0); <- вопрос ниже по этому
   return a.exec();
}

Во-первых: при сборке (у меня задокументировано) без
Код
C++ (Qt)
exit(0);
, завершение после ввода симовал не происходит, приложение не завершает работу?

Во-вторых после сборки  уже с
Код
C++ (Qt)
exit(0);
, все нормально работает, Но, захотел  запустить exe, естественно потребовало  mingwm10.dll, докинул, потом еще и  QtCore4.dll, а  больше ничего не требовало , но при запуске ошибка дословно
"ТОчка входа в процедуру _ZN16QCoreApplication4execEv не найдена в библиотеке DLL QtCore4.dll"

Вопрос естественно что да как, т.е. как запустить нормально консольное допустим приложение, и правильно ли что оно при сборке без
Код
C++ (Qt)
exit(0);
приложение не завршается?




Название: Re: Сборка и запуск
Отправлено: pastor от Июль 18, 2009, 00:39
1. Почитай в ассистанте про QCoreApplication::exec()

2. exit ненужен. Можешь написать просто:

Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <iostream.h>
#include <stdio.h>
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   cout<<"Hello Qt\n";
 
   getchar();
 
   return 0;
}


Название: Re: Сборка и запуск
Отправлено: Account от Июль 18, 2009, 00:45
Ратаю в окнах XP

собрана по всей видимости с помощью mingw, ибо это просто установленный вариант исходников 4.5.1 взятый с сайта...
собираю из под QTCreator - а там только mingw, насколько я знаю


Название: Re: Сборка и запуск
Отправлено: f-r-o-s-t от Июль 18, 2009, 11:32
Во-вторых после сборки  уже с
Код
C++ (Qt)
exit(0);
, все нормально работает, Но, захотел  запустить exe, естественно потребовало  mingwm10.dll, докинул, потом еще и  QtCore4.dll, а  больше ничего не требовало , но при запуске ошибка дословно
"ТОчка входа в процедуру _ZN16QCoreApplication4execEv не найдена в библиотеке DLL QtCore4.dll"
Копируй QtCore4.dll не из папки bin а из qt/lib.


Название: Re: Сборка и запуск
Отправлено: Account от Июль 19, 2009, 14:27
f-r-o-s-t  , спасибо, только эта библиотека находеилась не там, у меня Qt установлено на диске с:\ в корне, сначала брал QtCore4.dll, из c:\Qt\2009.03\bin\ , а надо было c:\Qt\2009.03\qt\bin\, все заработало, но вот опять же проблема на завершение выполнения программы

Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <iostream.h>
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
   cout<<"Hello Qt\n";
   getchar();
 
   return a.exec();
}

Не завершается она нормально после ввода символа( ТАк что так я и не понял что надо, помогает только как писал ранее exit(0)
Объясите новичку)
 


Название: Re: Сборка и запуск
Отправлено: pastor от Июль 19, 2009, 14:32
Не завершается она нормально после ввода символа( ТАк что так я и не понял что надо, помогает только как писал ранее exit(0)
Объясите новичку)

А пример я для кого привел?


Название: Re: Сборка и запуск
Отправлено: f-r-o-s-t от Июль 19, 2009, 14:33
она и не должна после getchar() завершаться, т.к. запускаешь цикл обработки событий потом =)
как уже сказали почитай про QCoreApplication::exec()


Название: Re: Сборка и запуск
Отправлено: Account от Июль 19, 2009, 14:39
f-r-o-s-t , у меня с английским шляпа, но обязательно сегодня почитаю)
А пока просто решил проблему вот так
Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <iostream.h>
 
int main(int argc, char *argv[])
{   char c;
   QCoreApplication a(argc, argv);
   cout<<"Hello Qt\n";
   getchar();
   return 0;
}

ну и конечно если вот атк просто кончольные какие то проги делать то переносить себе дороже, библиотека вон QtCore4 за 2 Мега весит(


Название: Re: Сборка и запуск
Отправлено: f-r-o-s-t от Июль 19, 2009, 14:49
А зачем такие проги переносить ? =)

Тема про размер уже разжевана и пережевана, можете поискать по форуму.


Название: Re: Сборка и запуск
Отправлено: Account от Июль 19, 2009, 14:57
А зачем такие проги переносить ? =)
Тема про размер уже разжевана и пережевана, можете поискать по форуму.

Естетсвенно незачем))), просто эксперементирую))
Тему по размеру уже видел и читал))

P.S.# Звиняюсь за оффтоп)


Название: Re: Сборка и запуск
Отправлено: Account от Июль 19, 2009, 15:16
Посмотрел инфу по QCoreApplication::exec() (честно так как с английским не очень, не особо понял) сделал в итоге вот так
Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <iostream.h>
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   cout<<"Hello Qt\n";
   getchar();
   a.exit(0);
}

БУдет парвильно так или нет?


Название: Re: Сборка и запуск
Отправлено: lit-uriy от Июль 19, 2009, 15:19
Да зачем в таком приложении exec()?
У тебя нет событий чтобы их обрабатывать. И первый вариант pastor'а с return 0; более чем достаточный.


Название: Re: Сборка и запуск
Отправлено: f-r-o-s-t от Июль 19, 2009, 15:22
2Account я тебе все таки рекомендую английский подтянуть, ибо assistent невероятно удобная вещь =)


Название: Re: Сборка и запуск
Отправлено: Account от Июль 19, 2009, 15:26

f-r-o-s-t , да я понимаю, из-за незанния его страдаю очень(( Но в школе немец учил, и счас приходиться в институте, а так всетаки помогает то что в техже IDE и языках хоть технически немного понимаю))
И всетаки я понимаю что достал наверное , но вот правильнее и корректнее  (по стандарту) как завершать
a.exit(0) или return 0  ?



Название: Re: Сборка и запуск
Отправлено: lit-uriy от Июль 19, 2009, 15:57
>>как завершать a.exit(0) или return 0  ?
В асистенте написано, что эта функция завершает выполнение QCoreApplication::exec(), т.к. последней у тебя нет, то и QCoreApplication::exit() тебе ни к чему