gpt4 book ai didi

c++ - 我如何从 QProcess 读取数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:04 26 4
gpt4 key购买 nike

我有这个简单的 C++ 程序:

int main(int argc, char *argv[])
{

QCoreApplication a(argc, argv);

QProcess ps;
QByteArray ba;

ps.start("ls J:");
ba = ps.readAllStandardOutput();
char *someData = ba.data();

cout << "Testing QProcess ..." << endl;
cout << someData << endl;
cout << "done!" << endl;

return a.exec();
}

输出是:

Testing QProcess ...


done!

如果我从 Windows cmd 运行“ls J:”,它就会工作。我错过了什么?

最佳答案

使用QIODevice::waitForReadyRead()在一个循环中,只有在返回之后,才调用 readAllStandardOutput()。正如文档中所说,QProcess::readAllStandardOutput()将读取所有可用 数据,但不会等待。在开始阅读之前,您需要等待进程以 QProcess::waitForStarted() 开始。 .

快速未经测试的部分代码,将 ba = ps.readAllStandardOutput(); 行替换为:

if (ps.waitForStarted(-1)) {
while(ps.waitForReadyRead(-1)) {
ba += ps.readAllStandardOutput();
}
}
// else report error or whatever

当出现错误或子进程终止时,应该退出循环,但继续阅读直到那时,没有超时。

注意:在“常规”Qt 程序中,您将运行事件循环,然后您将不会调用 waitForReadyRead() 或其他类似的便利函数。他们会阻止事件循环并停止其他一切。在这样的程序中,您最好使用信号和槽,或者开始使用线程(但这通常不是首选,它只会增加不必要的复杂性)。

关于c++ - 我如何从 QProcess 读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15614927/

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