如何解决在Qt中实时获取cmd命令的输出
我在Qt中使用此代码获取cmd命令的输出
{'name': 'John','urls': 'google.com/\r\nbing.com/\r\naskjeeves.com/'`,'user_email': 'john.smith@gmail.com'}
效果很好。
使用此代码,我可以使用 QProcess c_output;
c_output.start("some-exe",QStringList() << "param1" << "param2" << "param3...");
if (!c_output.waitForStarted())
std::cout << false;
c_output.write("...");
c_output.closeWriteChannel();
if (!c_output.waitForFinished())
std::cout << false;
访问输出,但是问题是这段代码要等到cmd完成exec ...,然后在c_output.readAll()
中提供所有输出,我想实时获取输出并显示为我程序的gui
我的意思是我赞扬exec之后打印多行,我想在程序中一一显示它们,而不是等它完成。
解决方法
您可以使用waitForReadyRead
代替waitForFinished
,请参见https://doc.qt.io/qt-5/qprocess.html#waitForReadyRead
以下是用法的简单示例:
#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QProcess>
#include <QDebug>
int main(int argc,char *argv[])
{
QCoreApplication app(argc,argv);
QProcess c_output;
c_output.setProcessChannelMode(QProcess::MergedChannels);
c_output.start("dmesg",QStringList() << "-w");
if (!c_output.waitForStarted()){
qDebug() << "Failed to start";
return -1;
}
c_output.write("...");
c_output.closeWriteChannel();
while (c_output.state() != QProcess::NotRunning)
{
qDebug() << ".";
if (c_output.waitForReadyRead())
qDebug() << "c_output" << c_output.readAllStandardOutput();
}
return app.exec();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。