Qt中有趣的进程任务

Interesting task of the processes in Qt

本文关键字:进程 任务 Qt      更新时间:2023-10-16

假设我使用QProcess运行一个控制台应用程序。应用程序运行,显示一些信息,然后等待n秒,显示其他信息。

我当前的代码是:

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

目前我在最后得到了所有的输出,但是我需要做的是得到输出并在它可用时显示它。我该怎么做呢?

您可以连接到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;
}

免责声明:将其视为伪代码,因为我没有构建它,但它应该演示使用的概念。