![]() |
|
|
![]()
|
|
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Здравствуйте.
Хочу создать консольное приложение на Qt, которое будет в интерактивном режиме получать команды от пользователя (как python.exe, например) и обрабатывать сигналы от QtNetwork или какого-нибудь другого Qt-шного объекта. Для второго случая мне в конце main() нужно написать
а для первого нужен бесконечный цикл типа
как быть ? Спасибо. Это сообщение отредактировал(а) borisbn - 18.8.2012, 09:37 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
а почему бы не поместить первый во второй ? Добавлено через 1 минуту и 22 секунды точнее не сам цикл.. цикл во втором уже есть, а само чтение с потока.. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
mes, правильно ли я понял, что можно подписаться на событие ввода данных с клавиатуры (точнее из входного потока) и не делать бесконечного цикла?
Если да, то не подскажите как? Спасибо. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
по сути, exec включает в себя цикл обработки всех сообщений.. можно как подписываться на сообщение, так и просто на каждой итерации обработки делать свое черное белое дело.. Как вклиниться в цикл зависит от библиотеки.. одни имеют виртуальный метод, другие принимают функтор или фильтр.. как в Qt сейчас глянем.. Добавлено через 6 минут и 19 секунд borisbn, см. void QObject::installEventFilter ( QObject * filterObj ) |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
> см. void QObject::installEventFilter ( QObject * filterObj )
ИМХО это - не то. Какому объекту инсталлировать фильтр и какое событие ждать? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
не знаю как сделать так как описывает mes, но интересно, я бы предложил создать тред для QtNetwork, должно сработать вроде как, из основного треда посылать сообщения в нетворский, а в треде вроде как есть свой event loop
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
дык основного треда не будет... там вместо a.exec() будет while(true) { cin << command; } и потом, не запуская a.exec() я не смогу подписаться на события что в неворковском треде, что в QTcpSocket'е я вообще этот QtNetwork для примера привёл. Это м.б. элементарный таймер или ещё что-то в этом духе... нарооооооод... неужели никто никогда не делал консольные Qt-шные приложения с сигнал/слотами и интерактивным вводом команд от пользователя ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Слушай stdin через QSocketNotifier - это вроде как один из рабочих вариантов.
|
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Amp, спасибо. Не знал про QSocketNotifier. Но... я попробовал и у меня не заработало.
Вот проект:
obj.h и другой сгенерённый код из obj.cpp я опустил. Происходит следующее: программа запускается, печатает >> и всё. Если я что-то ввожу оно не отображается (нет эха) и по Enter вообще ничего не происходит. Я пробовал запустить прокграмму так
тот же эффект. Не подскажешь, что я не так делаю ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Оказывается под Windows такой код работать не будет. Печально.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
а под линух работает ? (щаз нет возможности проверить)
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
даже под cygwin'ом, скорее всего будет работать.
|
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
> Да, в линуксе работает.
извини что сомневаюсь, но ты проверял или надеешься? Если первое, то Бил гей(тццц) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
||||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |