gpt4 book ai didi

c++ - Qt 中进程的有趣任务

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:34 26 4
gpt4 key购买 nike

假设我使用 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;
}

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

关于c++ - Qt 中进程的有趣任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com