Russian Qt Forum
Ноябрь 27, 2024, 01:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Консольное приложение  (Прочитано 23543 раз)
mcrads
Гость
« : Март 02, 2010, 17:24 »

Всем доброго времени суток. Снова с замудренными вопросами ) Пишу консольное приложение на Qt. и собстно проблема:
1) есть ли в Qt средства ввода/вывода в консоли помимо stdio.h и iostream?
2) почему после команд return a.exec(); a.exit; мое приложение еще работает? командная строка висит, правда ничего не принимает.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 02, 2010, 17:39 »

1. QTextStream
2. return 0;
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
mcrads
Гость
« Ответ #2 : Март 02, 2010, 17:42 »

1. QTextStream
2. return 0;
ЭЭЭ а QIODevice какое задавать?
Можно пример ввода в консоль на qt? или объясните как пользоваться...
« Последнее редактирование: Март 02, 2010, 17:45 от Sickfar » Записан
Silentium
Гость
« Ответ #3 : Март 02, 2010, 17:54 »

Код:
#include <QTextStream>
....
QTextStream in(stdin),out(stdout);
out<<"что то вводим"<<endl;
out.flash; //обязательно сбрасываем
in>>an>>endl; //что то вводим
Этот пример гдето лежал на этом форуме
Записан
mcrads
Гость
« Ответ #4 : Март 02, 2010, 17:55 »

Благодарю! помогло! =)
Записан
Amigo_sa
Гость
« Ответ #5 : Март 02, 2010, 18:06 »

Всем доброго времени суток. Снова с замудренными вопросами ) Пишу консольное приложение на Qt. и собстно проблема:
2) почему после команд return a.exec(); a.exit; мое приложение еще работает? командная строка висит, правда ничего не принимает.
Про exit-ы и quit-ы меня недавно поправляли, то есть цикл обработки прилоений уже прервался, но main, либо вызывающая функция еще не завершилась.
« Последнее редактирование: Март 02, 2010, 18:09 от Amigo_sa » Записан
mcrads
Гость
« Ответ #6 : Март 02, 2010, 18:18 »

И все же. как тогда запустить цикл событий? если не exec'ом? запускаю exec - прога не выходит. не запускаю - цикла то нет. или все будет и без него? я пишу Tcp сервак.
Записан
Amigo_sa
Гость
« Ответ #7 : Март 02, 2010, 18:29 »

Хм. кажется понял, в чем у вас проблема...
return a.exec();
a.exit(); - до exit-а управление никогда не доходит.

Мой код, где так же был ТCP сервак:
Код:
QCoreApplication a(argc, argv);
QSharedPointer<ILog> applLog(ILog::create("TerminalManagerServer"));
CommandServer server(applLog);

    if (!server.listen(QHostAddress::Any, 5700))
    {
        exit(2);
    }

    if (!sender.initialize())
    {
        exit(1);
    }

    return a.exec();
для корректного выхода из приложения есть слот, в котором написано QApplication::exit(0); как вариант, можно написать обработчик нажатия cntrl+C
Записан
mcrads
Гость
« Ответ #8 : Март 02, 2010, 19:06 »

хм... странно... даже есть написать
a.exit(0);
return a.exec()
все равно ноль эффекта =(
Записан
BRE
Гость
« Ответ #9 : Март 02, 2010, 19:09 »

хм... странно... даже есть написать
a.exit(0);
return a.exec()
все равно ноль эффекта =(
А что тебя удивляет?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Март 02, 2010, 19:11 »

Sickfar, если запущен цикл обработки событий, то нужно выходить через слот quit(), соедени с ним сигнал какой-нибудь (означающий завершение работы).
Когда управление вернётся в цикл обработки событий, то цикл прекратится, т.е. закончит выполнятся функция QCoreApplication::exec()
Записан

Юра.
mcrads
Гость
« Ответ #11 : Март 02, 2010, 19:14 »

А вообще без него можно обходиться?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Март 02, 2010, 19:16 »

>>А вообще без него можно обходиться?
можно, если ты не используешь события и взаимодействие между потоками
Записан

Юра.
mcrads
Гость
« Ответ #13 : Март 02, 2010, 21:48 »

не понимаю почему не работает... жесть какая-то... exec подвешивает все. без него - не крутятся события, не работают сигнал-слоты.. почему?
Записан
BRE
Гость
« Ответ #14 : Март 02, 2010, 21:53 »

не понимаю почему не работает... жесть какая-то... exec подвешивает все. без него - не крутятся события, не работают сигнал-слоты.. почему?
exec запускает цикл обработки событий. Если его не запустить, то события обрабатываться не будут, асинхронные сигналы работать не будут.
Если это все тебе не нужно - не запускай, и наоборот.
Ты лучше напиши, что ты хочешь сделать.  Подмигивающий
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.