我是 qt 开发的新手,我想将 QProcess 的输出实时传输到文本浏览器。我首先执行一个简单的 echo 命令,但程序的输出没有显示。
我究竟做错了什么????
QProcess p;
p.start("echo hye");
QByteArray byteArray = p.readAllStandardOutput();
QStringList strLines = QString(byteArray).split("\n");
QString line= p.readAllStandardOutput();
if(p.state()==QProcess::NotRunning)
ui->textBrowser->append("not running");
foreach (QString line, strLines){
ui->textBrowser->append(line);}
附:我在一台linux机器上。
编辑:
我仍然无法在 textBrowser 中获得输出。
我更改了 Qprocess 参数并尝试了 waitForStarted() 和 waitForReadyRead() ,以便进程及时启动并且结果可用。
我添加了 waitForFinished() ,以便进程在超出范围时不会终止。
QProcess p;
p.start("echo", QStringList() << "hye");
p.waitForStarted();
QByteArray byteArray = p.readAllStandardOutput();
QStringList strLines = QString(byteArray).split("\n");
QString line= p.readAllStandardOutput();
if(p.state()==QProcess::NotRunning)
ui->textBrowser->append("not running");
ui->textBrowser->append(line);
p.waitForFinished();
要读取标准输出,您需要调用waitForReadyRead()
在读取标准输出之前,或者您需要连接Qprocess信号readyReadStandardOutput()
到您的插槽并从插槽读取标准输出。
还要确保您的 QProcess 不在堆栈上。
我尝试下面的代码工作正常。
EDIT:
MyProcess::MyProcess(QObject *parent) :
QObject(parent)
{
QString program = "echo";
QStringList arguments;
arguments << "Hello";
mProcess.start(program,arguments);
connect(&mProcess,SIGNAL(readyReadStandardOutput()),this,SLOT(readyReadStandardOutput()));
connect(&mProcess,SIGNAL(readyReadStandardError()),this,SLOT(readyReadStandardError()));
}
void MyProcess::readyReadStandardOutput(){
qDebug()<< mProcess.readAllStandardOutput();
}
void MyProcess::readyReadStandardError(){
qDebug() << mProcess.readAllStandardError();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)