Название: Взаимодействие с запущенным процессом:читается не весь stdout Отправлено: nightwalker от Октябрь 13, 2011, 15:59 Добрый день
Мне требуется написать оболочку для консольной программы - сервера, слушающего сокет. Код привожу ниже Цитировать class Shell : public QWidget { Q_OBJECT private: QProcess *conProc; //процесс, в котором будет запущена консольная программа QTextEdit *txtOut;//текстовое поле, в котором будет отображаться выходная информация программы QLineEdit *txtIp;//текстовое поле, в котором можно задать IP public: Shell(QWidget *pwgt = 0) : QWidget(pwgt) { conProc = new QProcess(this); txtOut = new QTextEdit; txtIp = new QLineEdit("192.168.160.5"); QLabel *lblIp = new QLabel("IP:"); QPushButton *butStart = new QPushButton("Start"); connect(txtIp, SIGNAL(returnPressed()), SLOT(slotReturnPressed()) ); connect(conProc, SIGNAL(readyReadStandardOutput()), this, SLOT(_slotDataOnStdout()) ); connect(conProc, SIGNAL(readyRead()), this, SLOT(_slotDataOnStdout()) ); connect(butStart, SIGNAL(clicked()), SLOT(slotReturnPressed())); //компоновка виджетов //горизонтальная QHBoxLayout *boxHLayout = new QHBoxLayout; boxHLayout->addWidget(lblIp); boxHLayout->addWidget(txtIp); boxHLayout->addWidget(butStart); //вертикальная QVBoxLayout *boxVLayout = new QVBoxLayout; boxVLayout->addWidget(txtOut); boxVLayout->addLayout(boxHLayout); setLayout(boxVLayout); } public slots: void _slotDataOnStdout() { //считывание данных вывода программы и запись их в текстовое поле txtOut->append(conProc->readAllStandardOutput()); } void slotReturnPressed() { QString exPath = "./PMY"; //путь до исполняемого файла консольной программы(будет задаваться из конфига) conProc->setProcessChannelMode(QProcess::SeparateChannels); conProc->setReadChannel( QProcess::StandardOutput ); QStringList arguments; conProc->start(exPath); } }; Проблема в том, что в TextEdit'e не отображается весь стандартный вывод запускаемого процесса, а только часть, до принятия соединения. (соединение с клиентом проходит, это точно). Если переключить ProcessChannelMode в ForwardedChannels, то ВЕСЬ вывод(с принятием соединения, и прочей информацией, которая должна выводиться) становиться виден. Пожалуйста, помогите разобраться. Есть вариант, конечно, читать свой stdout в режиме ForwardedChannels, и записывать в QTextEdit, но я новичок в Qt и не знаю, как это сделать Название: Re: Взаимодействие с запущенным процессом:читается не весь stdout Отправлено: nightwalker от Октябрь 17, 2011, 15:41 up
|