Ich habe ähnliche Fragen gefunden, aber nie die genaue Antwort. Ich habe ein Qt-Programm, das einen QProcess startet und die Ausgabe in eine QTextEdit-Box schreibt, so weit so gut. Aber es tut dies nur, wenn das Programm beendet ist. Wenn möglich, möchte ich das Programm stdout in Echtzeit gedruckt werden. In einer idealen Welt gäbe es eine Art von Signal, das QProcess emittiert, wenn es eine Zeile bereit zu lesen ist, wenn es nicht möglich mit QProcess ist es überhaupt möglich? Idealerweise könnten Sie auch noch den Rest des Programms verwenden, während der Prozess läuft.
Heres einige der Code habe ich bisher, sehr einfach, es gibt nur die erste Zeile des QProcess stdout zu einem QTextEdit aus
...
extProcess::extProcess(QObject *parent) :
QObject(parent)
extProcess::extProcess(QObject *parent) :
QObject(parent)
{
proc = new QProcess(this); //initialize proc
arguments << "-v";
connect(proc, SIGNAL(readyRead()), this, SLOT(logReady()));
}
void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}
void extProcess::logReady()
{
emit outLog(proc->readLine());
}
...
Dies ist eine alternative Version, die ich ausprobiert habe. Sie zeigt die gesamte QProcess-Ausgabe, aber immer noch aber sie wird nur angezeigt, wenn das Programm beendet ist.
...
extProcess::extProcess(QObject *parent) :
QObject(parent)
{
proc = new QProcess(this); //initialize proc
proc->setProcessChannelMode(QProcess::SeparateChannels);
arguments << "-v";
connect(proc, SIGNAL(readyReadStandardOutput()), this, SLOT(logReady()));
}
void extProcess::logReady()
{
while(proc->bytesAvailable()){
emit outLog(proc->readLine());
}
}
void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}
void extProcess::killProcess()
{
proc->terminate();
emit clearLog();
emit outLog("--Process Terminated--");
}
....
Gracias