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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QProcess  (Прочитано 7350 раз)
Firefox
Гость
« : Июнь 03, 2014, 14:57 »

Здравствуйте. вычитала в документации, что в QProcess возможно общение через каналы. вопрос в qt 4.3.3 работает ли это в Windows 7? Мне необходимо запустить процесс my_proga.exe и программы Base.exe, и получать события нажатия кнопок из my_proga.exe в Base.exe. Но я не понимаю, если это можно сделать как-то, то как записать в my_proga.exe то, что надата кнопка 1 и это я прочитаю потом в Base.exe по сигналу readyReadStandardOutput ().
Код:
 QProcess  prc= new QProcess (parent);
 QObject::connect(prc, SIGNAL(readyReadStandardOutput ()), this, SLOT(read_prc()) );
 prc->start("my_proga.exe", QStringList() << arg1,,arg2);
Записан
Firefox
Гость
« Ответ #1 : Июнь 03, 2014, 15:50 »

В общем-то вопрос по сути как записать в stdout из дочернего процесса правильно.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #2 : Июнь 04, 2014, 08:13 »

Ну хоть немного конкретики - первый пост был отгуглотрансечен с русского на зимбабвийский и обратно?
В дочернем процессе cout использовать запрещено?
Записан
Firefox
Гость
« Ответ #3 : Июнь 04, 2014, 09:24 »


Надо бало подключить iostream оказывается чтобы cout программа видела.
и почему-то
connect(prc, SIGNAL(readyReadStandardOНаutput ()), this, SLOT(read_prc()) );  возвращает false
« Последнее редактирование: Июнь 04, 2014, 09:48 от Firefox » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Июнь 04, 2014, 09:47 »

программа ругается что не знает что такое cout, работаю в VS2003.
Это потому, что cout определен в iostream.

и почему-то
connect(prc, SIGNAL(readyReadStandardOutput ()), this, SLOT(read_prc()) );  возвращает false
А read_prc определен в секции slots?
Записан
Firefox
Гость
« Ответ #5 : Июнь 04, 2014, 09:54 »

Да это private slots,в консоли выводит следующее attempt to bind non-signal QProcess::readyReadStandardOutput()
« Последнее редактирование: Июнь 04, 2014, 09:56 от Firefox » Записан
Firefox
Гость
« Ответ #6 : Июнь 04, 2014, 11:33 »

Проблема была с qobject но все хорошо, только пока что сигнал не генерится.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Июнь 04, 2014, 12:39 »

а my_proga.exe запускается вообще? может ее нет в папке с экзешником?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Firefox
Гость
« Ответ #8 : Июнь 04, 2014, 13:03 »

Запескается. В конструкторе у нее стоит
Код:
Std::cout<<"hello world";

Записан
Bepec
Гость
« Ответ #9 : Июнь 04, 2014, 13:11 »

Когда подобное делал, QProcess не генерил сигнал, пока не приходил символ конца строки Веселый
Попробуйте, вдруг поможет Улыбающийся
Записан
Firefox
Гость
« Ответ #10 : Июнь 04, 2014, 13:37 »

Спасибо попробую. пока выложу точный код моей программы, может там есть косяки явные
Код:
ypr::ypr(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
QStringList arg;
arg<<"rm1"<<"0"<<"ARMO"<<"98"<<"198"<<"192.168.1.29";
pr_obz=new QProcess(parent);
pr_obz->setReadChannel(QProcess::StandardOutput);
pr_obz->setReadChannelMode(QProcess::MergedChannels);

pr_obz->start("TKO.exe", arg);
pr_obz->waitForStarted();
bool bn=false;
bn=connect(pr_obz,SIGNAL(readyReadStandardOutput()),this,SLOT(Slott()));
}
void ypr::Slott()
{
QString str=pr_obz->readAllStandardOutput();
ui.lineEdit->setText(str);
}
В программе TKO.exe
Код:
#include <iostream>
using namespace std;
TKO::TKO(QWidget *parent,Qt::WindowFlags flags, int argc,char *argv[]) :
    QWidget(parent,flags),
    ui(new Ui::TKO)
{
    ui->setupUi(this);
std::cout<<"hello"; \\ добавлю конец строки
}
Записан
Firefox
Гость
« Ответ #11 : Июнь 04, 2014, 14:01 »

\n не помог, подскажите что у меня может быть не так в коде
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #12 : Июнь 04, 2014, 14:48 »

попробуй коннект делать перед pr_obz->start("TKO.exe", arg);

Q_OBJECT написан?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Firefox
Гость
« Ответ #13 : Июнь 04, 2014, 15:26 »

Пробовала ставить перед запуском не помогло. Q_Object есть, connect возвращает true. Если зактыть TKO.exe воучную, то тогда возникает сигнал и я захожу в слот. Но мне надо во время рботы программы отсылать данные , а не после завершения.
« Последнее редактирование: Июнь 04, 2014, 15:38 от Firefox » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #14 : Июнь 04, 2014, 15:54 »

Если зактыть TKO.exe воучную, то тогда возникает сигнал и я захожу в слот. Но мне надо во время рботы программы отсылать данные , а не после завершения.
cout буферизируется. Сбрасывайте буфер, либо через его метод flush, либо добавьте в конец std::endl (endl сам вызовет flush).
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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