qt的qprocess的readallStandurdOutput没法获得标准输出的内容

问题遇到的现象和发生背景

在qt中创建一个进程qprocess用start去执行终端命令,查询home目录下内容,并且将它的标准输出放到字节数组str1,然后在application out窗口打印出来,但现在问题是str1通过qprocess的readallStandurdOutput没法获得标准输出的内容,如何解决?

操作环境、软件版本等信息

操作环境:Ubuntu16.04
软件版本:qt5.5.1

尝试过的解决方法

用qprocess的execute执行终端命令,可以查询到home目录下的结果并在application output显示出来,但依然没法打印。
并且会出现QIODevice::read (QProcess): device not open

img

我想要达到的结果

可以把标准输出打印出来

以下是代码
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QProcess>
#include <QThread>
#include <QDebug>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QProcess *myprocess;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    myprocess = new QProcess(this);//创建一个进程

    myprocess->execute("ls /home");//用进程执行终端命令查看home目录下所有文件

    QByteArray str1 = myprocess->readAllStandardOutput();//读取这些文件放到字节数组str1中
    if(str1.isEmpty()){
        qDebug()<<"emptu"<<endl;
    }
    QString str(str1);
    qDebug()<<"ss"<<str<<endl;
}

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

QProcess少了一个设置模式

process.setProcessChannelMode(QProcess::SeparateChannels);

QProcess::execute()是个静态函数,执行execute对QProcess对象本身没有任何操作,当然是无法读取的