Tan*_*tty 3 qt qprocess qt-creator
我是qt开发的新手,我想将QProcess的输出实时传输到textBrowser.我开始执行一个简单的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);}
Run Code Online (Sandbox Code Playgroud)
PS我在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();
Run Code Online (Sandbox Code Playgroud)
要读取标准输出,您需要在读取标准输出waitForReadyRead()之前调用,或者需要将Qprocess的信号连接readyReadStandardOutput()到插槽并从插槽读取标准输出.
还要确保您的QProcess不在堆栈中.
我试过以下代码工作正常.
编辑:
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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10731 次 |
| 最近记录: |