Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QApplication::exec + std::cin 
:(
    Опции темы
borisbn
Дата 18.8.2012, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Здравствуйте.

Хочу создать консольное приложение на Qt, которое будет в интерактивном режиме получать команды от пользователя (как python.exe, например) и обрабатывать сигналы от QtNetwork или какого-нибудь другого Qt-шного объекта.
Для второго случая мне в конце main() нужно написать
Код
return a.exec();

а для первого нужен бесконечный цикл типа
Код
while ( true ) {
    std::cin >> command;
    ...
}


как быть ?
Спасибо.

Это сообщение отредактировал(а) borisbn - 18.8.2012, 09:37


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 18.8.2012, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(borisbn @  18.8.2012,  08:35 Найти цитируемый пост)
а для первого нужен бесконечный цикл типа

Цитата(borisbn @  18.8.2012,  08:35 Найти цитируемый пост)
Для второго случая мне в конце main() нужно написать

а почему  бы не поместить первый во второй ?

Добавлено через 1 минуту и 22 секунды
точнее не сам цикл.. цикл во втором уже есть, а само чтение с потока.. 


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 18.8.2012, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



mes, правильно ли я понял, что можно подписаться на событие ввода данных с клавиатуры (точнее из входного потока) и не делать бесконечного цикла?
Если да, то не подскажите как?
Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 18.8.2012, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(борисбн @  18.8.2012,  10:44, пост2512231)
правильно ли я понял, что можно подписаться на событие ввода данных с клавиатуры (точнее из входного потока) и не делать бесконечного цикла?

по сути, exec включает в себя  цикл обработки всех сообщений.. можно как подписываться на сообщение, так и просто на каждой итерации обработки делать свое черное белое дело.. Как вклиниться в цикл зависит от библиотеки.. одни имеют виртуальный метод, другие принимают функтор или фильтр.. как в Qt сейчас глянем..

Добавлено через 6 минут и 19 секунд
borisbn, см. void QObject::installEventFilter ( QObject * filterObj ) 


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 21.8.2012, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



> см. void QObject::installEventFilter ( QObject * filterObj )  

ИМХО это - не то. Какому объекту инсталлировать фильтр и какое событие ждать?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ecspertiza
Дата 21.8.2012, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



не знаю как сделать так как описывает mes, но интересно, я бы предложил создать тред для QtNetwork,  должно сработать вроде как, из основного треда посылать сообщения в нетворский, а в треде вроде как есть свой event loop smile


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
borisbn
Дата 23.8.2012, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(ecspertiza @  21.8.2012,  14:04 Найти цитируемый пост)
из основного треда посылать сообщения в нетворский

дык основного треда не будет... там вместо a.exec() будет while(true) { cin << command; }
и потом, не запуская a.exec() я не смогу подписаться на события что в неворковском треде, что в QTcpSocket'е
я вообще этот QtNetwork для примера привёл. Это м.б. элементарный таймер или ещё что-то в этом духе...

нарооооооод... неужели никто никогда не делал консольные Qt-шные приложения с сигнал/слотами и интерактивным вводом команд от пользователя ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Amp
Дата 23.8.2012, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Слушай stdin через QSocketNotifier - это вроде как один из рабочих вариантов.
PM MAIL   Вверх
borisbn
Дата 23.8.2012, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Amp, спасибо. Не знал про QSocketNotifier. Но... я попробовал и у меня не заработало.
Вот проект:
Код
//main.cpp
#include <QCoreApplication>
#include <QSocketNotifier>
#include <stdio.h>
#include "obj.h"
#include <iostream>

int main( int argc, char *argv[] )
{
    QCoreApplication a( argc, argv );
    QSocketNotifier notifier( STDIN_FILENO, QSocketNotifier::Read );
    Obj o;
    QObject::connect( &notifier, SIGNAL( activated(int) ), &o, SLOT( onReadyRead(int) ) );
    std::cout << ">>";
    return a.exec();
}
// obj.cpp
void Obj::onReadyRead(int)
{
    std::string command;
    std::cin >> command;
    std::cout << std::endl << "command is: " << command << std::endl << ">>";
}

obj.h и другой сгенерённый код из obj.cpp я опустил.

Происходит следующее: программа запускается, печатает >> и всё. Если я что-то ввожу оно не отображается (нет эха) и по Enter вообще ничего не происходит. Я пробовал запустить прокграмму так
Цитата
prog_name.exe < text_file.txt

тот же эффект.
Не подскажешь, что я не так делаю ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Amp
Дата 23.8.2012, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Оказывается под Windows такой код работать не будет. Печально.
PM MAIL   Вверх
borisbn
Дата 23.8.2012, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



а под линух работает ? (щаз нет возможности проверить)


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
math64
Дата 23.8.2012, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



даже под cygwin'ом, скорее всего будет работать.
PM   Вверх
Amp
Дата 23.8.2012, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Цитата(borisbn @  23.8.2012,  15:05 Найти цитируемый пост)
а под линух работает ? (щаз нет возможности проверить) 

Да, в линуксе работает.
PM MAIL   Вверх
borisbn
Дата 23.8.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



> Да, в линуксе работает.
извини что сомневаюсь, но ты проверял или надеешься?

Если первое, то Бил гей(тццц)


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Amp
Дата 23.8.2012, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Цитата(borisbn @  23.8.2012,  18:04 Найти цитируемый пост)
извини что сомневаюсь, но ты проверял или надеешься?

Проверял.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.