Добрый день
Мне требуется написать оболочку для консольной программы - сервера, слушающего сокет.
Код привожу ниже
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 и не знаю, как это сделать