2012-04-11 3 views
3

Ich bin ein Neuling in Qt-Entwicklung, und ich möchte die Ausgabe von QProcess zu einem TextBrowser in Echtzeit übertragen. Ich habe mit der Ausführung eines einfachen echo-Befehls begonnen, aber die Ausgabe des Programms wird nicht angezeigt. Was mache ich falsch ???Echtzeit-Anzeige von QProcess-Ausgabe in einem TextBrowser

QProcess p; 
p.start("echo hye"); 
QByteArray byteArray = p.readAllStandardOutput(); 
    QStringList strLines = QString(byteArray).split("\n"); 
    QString line= p.readAllStandardOutput(); 
    if(p.state()==QProcess::NotRunning) 
     ui->textBrowser->append("not running"); 
    foreach (QString line, strLines){ 
    ui->textBrowser->append(line);} 

P.S. Ich bin auf einer Linux-Maschine.

EDIT: Ich bin immer noch nicht in der Lage, die Ausgabe in einem TextBrowser zu bekommen.

Ich habe die Qprocess-Parameter geändert und sowohl waitForStarted() als auch waitForReadyRead() versucht, so dass der Prozess rechtzeitig startet und die Ergebnisse verfügbar sind.

Ich habe waitForFinished() hinzugefügt, damit der Prozess nicht beendet wird, wenn er den Gültigkeitsbereich verlässt.

QProcess p; 
    p.start("echo", QStringList() << "hye"); 
    p.waitForStarted(); 
    QByteArray byteArray = p.readAllStandardOutput(); 
    QStringList strLines = QString(byteArray).split("\n"); 
    QString line= p.readAllStandardOutput(); 
    if(p.state()==QProcess::NotRunning) 
     ui->textBrowser->append("not running"); 
    ui->textBrowser->append(line); 
    p.waitForFinished(); 

Antwort

8

Standardausgabe zu lesen, müssen Sie entweder waitForReadyRead() aufrufen, bevor stardard Ausgabe zu lesen, oder Sie benötigen QProcess das Signal readyReadStandardOutput() zu Ihrem Steckplatz und lesen Standardausgabe aus dem Schlitz zu verbinden.

auch sicherstellen, dass Ihr QProcess nicht auf Stapel ist.

Ich versuchte folgenden Code funktioniert gut.

EDIT:

MyProcess::MyProcess(QObject *parent) : 
    QObject(parent) 
{ 
    QString program = "echo"; 
    QStringList arguments; 
    arguments << "Hello"; 
    mProcess.start(program,arguments); 
    connect(&mProcess,SIGNAL(readyReadStandardOutput()),this,SLOT(readyReadStandardOutput())); 
    connect(&mProcess,SIGNAL(readyReadStandardError()),this,SLOT(readyReadStandardError())); 
} 

void MyProcess::readyReadStandardOutput(){ 
    qDebug()<< mProcess.readAllStandardOutput(); 
} 

void MyProcess::readyReadStandardError(){ 
    qDebug() << mProcess.readAllStandardError(); 
} 
+0

Können Sie bitte einen guten Beispiel-Code –

+0

hinzugefügt Beispielcode schreiben, hoffen es hilft. – Kunal

+0

Ich möchte die Ergebnisse in einem TextBrowser anzeigen, aber dieser Code zeigt Ergebnisse in QT-Terminal selbst. –