Нет способа портативного подключения в цикле событий Qt для событий stdin / stdout.Следующее работает на платформах, отличных от Windows:
QSocketNotifier *n1 = new QSocketNotifier(0, QSocketNotifier::Read, this);
connect(n1, SIGNAL(activated(int)), this, SLOT(readInputChannel()));
QSocketNotifier *n2 = new QSocketNotifier(0, QSocketNotifier::Exception, this);
connect(n2, SIGNAL(activated(int)), this, SLOT(brokenInputChannel()));
"0" - это дескриптор файла (stdin).
Я бы использовал вышеизложенное и затем симулировал что-то похожее на Windows с помощью блокировкипоток, который читает из стандартного ввода и генерирует сигнал:
class StdinThread : public QThread
{
Q_OBJECT
signals:
void incomingData(QByteArray data);
public:
void run(void)
{
char buf[1024];
while (1)
{
int sz = fread(buf, 1, 1024, stdin);
if (sz == 0)
return;
emit incomingData(QByteArray(buf, sz));
}
}
};
затем, в дочернем процессе:
StdinThread *t = new StdinThread(this);
connect(t, SIGNAL(incomingData(QByteArray)), this, SLOT(processInputData(QByteArray)));
connect(t, SIGNAL(finished()), this, SLOT(brokenInputChannel()));
t->run();