Home Articles

在插槽中获取qprocess输出

Asked
Viewed 676 times
0

我有一个小程序的问题(我是c和qt的初学者) . 按下按钮,它会启动带有qprocess的cli应用程序,并且一旦cli应用程序将其写入stdout或stderr,输出就会显示在文本字段中 .

我读到这是一个好主意,为此使用信号和插槽,但它不起作用 .

编译器抛出一个错误,在我的插槽getOutput()中没有声明“process”对象(C2065)

这是代码 .

processgui.cpp:

#include "processgui.h"
#include "ui_processgui.h"
#include <QProcess>

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

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

void processGui::on_startProcess_clicked() {

    QProcess *process = new QProcess(this);
    QString program = "tracert";
    QString arguments = "";

    process->setReadChannelMode(QProcess::MergedChannels);

    process->start(program, QStringList() << arguments);

    process->waitForStarted();

    QObject::connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(getOutput()));

}

void processGui::getOutput() {

    QByteArray strdata = process->readAllStandardOutput();

    ui->textLog->append(strdata);

}

processgui.h:

#ifndef PROCESSGUI_H
#define PROCESSGUI_H

#include <QMainWindow>

namespace Ui {
class processGui;
}

class processGui : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_startProcess_clicked();

    void getOutput();

private:
    Ui::processGui *ui;
};

#endif // PROCESSGUI_H

提前致谢

3 Answers

  • 1

    QProcess *process 移动到 Headers 并在构造函数中使用 process = new QProcess(this) 初始化它 . 这样你就可以在你的插槽中访问它 .

  • 1
    QProcess *process = new QProcess(this);
    

    声明于:

    void processGui::on_startProcess_clicked()
    

    这是一个范围问题,process是一个在整个类中不可用的局部变量 .

  • 0

    您可以使用 sender() 访问插槽内的 QProcess 对象,如下所示:

    void processGui::getOutput() 
    {
        QProcess* process = qobject_cast<QProcess*>(sender());
        QByteArray strdata = process->readAllStandardOutput();    
    }
    

Related