2014-05-14 11 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; 
} 

免责声明:认为这是伪代码,因为我还没有建立,但它应该表现出概念来使用。