Название: Консольное приложение Отправлено: mcrads от Март 02, 2010, 17:24 Всем доброго времени суток. Снова с замудренными вопросами ) Пишу консольное приложение на Qt. и собстно проблема:
1) есть ли в Qt средства ввода/вывода в консоли помимо stdio.h и iostream? 2) почему после команд return a.exec(); a.exit; мое приложение еще работает? командная строка висит, правда ничего не принимает. Название: Re: Консольное приложение Отправлено: Пантер от Март 02, 2010, 17:39 1. QTextStream
2. return 0; Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 17:42 1. QTextStream ЭЭЭ а QIODevice какое задавать?2. return 0; Можно пример ввода в консоль на qt? или объясните как пользоваться... Название: Re: Консольное приложение Отправлено: Silentium от Март 02, 2010, 17:54 Код: #include <QTextStream> Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 17:55 Благодарю! помогло! =)
Название: Re: Консольное приложение Отправлено: Amigo_sa от Март 02, 2010, 18:06 Всем доброго времени суток. Снова с замудренными вопросами ) Пишу консольное приложение на Qt. и собстно проблема: Про exit-ы и quit-ы меня недавно поправляли (http://www.prog.org.ru/index.php?topic=12578.msg80098#msg80098), то есть цикл обработки прилоений уже прервался, но main, либо вызывающая функция еще не завершилась.2) почему после команд return a.exec(); a.exit; мое приложение еще работает? командная строка висит, правда ничего не принимает. Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 18:18 И все же. как тогда запустить цикл событий? если не exec'ом? запускаю exec - прога не выходит. не запускаю - цикла то нет. или все будет и без него? я пишу Tcp сервак.
Название: Re: Консольное приложение Отправлено: Amigo_sa от Март 02, 2010, 18:29 Хм. кажется понял, в чем у вас проблема...
return a.exec(); a.exit(); - до exit-а управление никогда не доходит. Мой код, где так же был ТCP сервак: Код: QCoreApplication a(argc, argv); Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 19:06 хм... странно... даже есть написать
a.exit(0); return a.exec() все равно ноль эффекта =( Название: Re: Консольное приложение Отправлено: BRE от Март 02, 2010, 19:09 хм... странно... даже есть написать А что тебя удивляет?a.exit(0); return a.exec() все равно ноль эффекта =( Название: Re: Консольное приложение Отправлено: lit-uriy от Март 02, 2010, 19:11 Sickfar, если запущен цикл обработки событий, то нужно выходить через слот quit(), соедени с ним сигнал какой-нибудь (означающий завершение работы).
Когда управление вернётся в цикл обработки событий, то цикл прекратится, т.е. закончит выполнятся функция QCoreApplication::exec() Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 19:14 А вообще без него можно обходиться?
Название: Re: Консольное приложение Отправлено: lit-uriy от Март 02, 2010, 19:16 >>А вообще без него можно обходиться?
можно, если ты не используешь события и взаимодействие между потоками Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 21:48 не понимаю почему не работает... жесть какая-то... exec подвешивает все. без него - не крутятся события, не работают сигнал-слоты.. почему?
Название: Re: Консольное приложение Отправлено: BRE от Март 02, 2010, 21:53 не понимаю почему не работает... жесть какая-то... exec подвешивает все. без него - не крутятся события, не работают сигнал-слоты.. почему? exec запускает цикл обработки событий. Если его не запустить, то события обрабатываться не будут, асинхронные сигналы работать не будут.Если это все тебе не нужно - не запускай, и наоборот. Ты лучше напиши, что ты хочешь сделать. ;) Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 22:17 Ну собственно вот... естественно сигнал нового соединения у TCP сервера не проходит =((( не пойму как быть... помогите пожалуйста! чую без exec не обойтись... но как его впихнуть? в консольном приложении я так понял нельзя определить keyPressEvent =((( - в этом тоже крупная проблема... Помогите пожалуйста!
PS Меня еще расстраивает что в доках нет примера по консолькам =(( Название: Re: Консольное приложение Отправлено: BRE от Март 02, 2010, 22:33 Ну собственно вот... естественно сигнал нового соединения у TCP сервера не проходит =((( не пойму как быть... помогите пожалуйста! чую без exec не обойтись... но как его впихнуть? в консольном приложении я так понял нельзя определить keyPressEvent =((( - в этом тоже крупная проблема... Помогите пожалуйста! Так что программа должна делать?Например, если это какой-то сервер, то можно создать объект и запустить цикл обработки событий. Этот объект, будет слушать порт, обслуживать подключения, принимать/отправлять данные. Если придет команда EXIT, то он вызовет quit и приложение завершиться. Код
Ты подробней напиши... Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 22:38 Ну это собственно сервак (клиентская часть пока не реализована...). он должен принимать клиентов и обслуживать их, а так же читать команды из консоли... так вот получается такая ерунда, что если не пускать exec - события не крутятся, это очевидно. запустить exec - значит писать обработчик событий. тогда как написать обработчик событий для ввода команд, если QKeyEvent лежит в модуле QtGui который в консольке отключен?
Название: Re: Консольное приложение Отправлено: BRE от Март 02, 2010, 22:49 он должен принимать клиентов и обслуживать их, а так же читать команды из консоли... Ну так открывай stdio, подключай сигнал readyRead, и читай то что ввел пользователь в консоли:Код
Причем здесь QtGui? Причем здесь QKeyEvent? Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 23:07 на stdio ругается что не объявлено... на stdin - никакой реакции совершенно =(((
Дело в том что при включенном exec консоль вообще никак не реагирует на клаву. ввод как заблокирован. все что тыкаю - на экране не отображается и значит до системы не доходит... =( Гуи здесь ни при чем, это я так, посетовал... я наверное вообще затупил... но блин, от этого решения зависит моя работа, а я с консолями еще не работал =( Название: Re: Консольное приложение Отправлено: BRE от Март 02, 2010, 23:15 Дело в том что при включенном exec консоль вообще никак не реагирует на клаву. ввод как заблокирован. все что тыкаю - на экране не отображается и значит до системы не доходит... =( Венда?Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 23:17 она самая. под юнихом нормально будет?
Название: Re: Консольное приложение Отправлено: BRE от Март 02, 2010, 23:22 под юнихом нормально будет? Нормально.Насчет консоли в венде, подожди может кто знающий ответит. Там скорее всего свои заморочки... UP: Кстати, если нужен такой интерактивный сервер, почему не использовать GUI. Можно сделать красивое окошко, в котором будет выводиться вся важная информация (количество подключенных клиентов, трафик, логи, ...), а так же будет строка, в которой можно вводить команды. Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 23:24 все-таки stdio или stdin? в файле открывать? на stdio ругается..
Название: Re: Консольное приложение Отправлено: BRE от Март 02, 2010, 23:27 все-таки stdio или stdin? в файле открывать? на stdio ругается.. Конечно stdin, stdio это опечатка. :)Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 23:43 Код: <Сие конструктор> скомпилил под маком - символы вводить можно, но увы все равно не работает ((( ррр! Название: Re: Консольное приложение Отправлено: mcrads от Март 02, 2010, 23:50 UP: Кстати, если нужен такой интерактивный сервер, почему не использовать GUI. Можно сделать красивое окошко, в котором будет выводиться вся важная информация (количество подключенных клиентов, трафик, логи, ...), а так же будет строка, в которой можно вводить команды. Задание такое - консоль. с гуем то все понятно... =( Название: Re: Консольное приложение Отправлено: BRE от Март 03, 2010, 07:09 Код
Название: Re: Консольное приложение Отправлено: mcrads от Март 03, 2010, 09:19 Спасибо! разобрался!!! отличный простенький пример! только жаль в винде все равно не работает =(
|