2014-05-14 10 views
1

假設我使用QProcess運行控制檯應用程序。該應用程序運行,顯示一些信息,然後等待n秒並顯示其他信息。Qt中進程的有趣任務

我當前的代碼是:

QProcess * p = new QProcess(); 
p->start("test.bat"); 
p->waitForStarted(); 
p->waitForFinished(); 
p->readAll(); 
delete p; 

目前我會在結束所有的輸出,但我需要做的就是輸出,並如它可顯示它。我該怎麼做呢?

+0

@AndrewMedico:請不要刪除重要的標籤。 – lpapp

+1

我不同意他們是「重要的」。問題不在於關於*'qt-core'或'qt-signals'。如果問題中涉及的每個概念的標籤及其答案都是合適的,那麼實際上**每個** Qt問題都可以用'qt-core'和'qt-signals'來標記。 –

回答

1

您可以連接到readyRead()信號,因此無論何時需要讀取一些數據,您都會繼續閱讀並顯示,而無需等待過程完成。這意味着在代碼方面如下:

class Foo : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit Foo::Foo(QObject parent = Q_NULLPTR) 
     : QObject(parent) 
    { 
     ... 
     connect(myProcess, SIGNAL(readyRead()), SLOT(handleReadyRead())); 
     connect(myProcess, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(handleFinished(int, QProcess::ExitStatus))); 
     connect(myProcess, SIGNAL(error(QProcess::ProcessError)), SLOT(handleError(QProcess::ProcessError))); 
     myProcess.start("test.bat"); 
     ... 
    } 

public slots: 
    void Foo::handleReadyRead() 
    { 
     qDebug() << myProcess.readAll();   
    } 

    void Foo::handleFinished(int, QProcess::ExitStatus) 
    { 
     // Handle finished   
    } 

    void Foo::handleError(QProcess::ProcessError) 
    { 
     // Handle error 
    } 

private: 
    QProcess myProcess; 
} 

免責聲明:認爲這是僞代碼,因爲我還沒有建立,但它應該表現出概念來使用。