在槽中获取 qprocess 输出

Posted

技术标签:

【中文标题】在槽中获取 qprocess 输出【英文标题】:get qprocess output in slot 【发布时间】:2013-06-27 08:59:35 【问题描述】:

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

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

编译器抛出一个错误,在我的插槽 getOutput() 中未声明“进程”对象 (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

提前致谢

【问题讨论】:

【参考方案1】:

QProcess *process 移动到您的标头,并在您的构造函数中使用process = new QProcess(this) 对其进行初始化。这样您就可以在您的插槽中访问它。

【讨论】:

【参考方案2】:
 QProcess *process = new QProcess(this);

声明于:

void processGui::on_startProcess_clicked() 

这是一个范围问题,进程是一个局部变量,在整个类中不可用。

【讨论】:

我用 thugas 的建议修复了它。我认为连接使该过程在插槽中可用,但您是对的。谢谢你的解释。【参考方案3】:

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

void processGui::getOutput() 

    QProcess* process = qobject_cast<QProcess*>(sender());
    QByteArray strdata = process->readAllStandardOutput();    

【讨论】:

以上是关于在槽中获取 qprocess 输出的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 中获取输出:'QProcess::start()' 和 'QProcess:readAllStandardOutPut()'

如何在 PySide 中获取 QProcess 运行的命令的输出?

QT软件开发: QProcess启动进程完成交互并获取输出

带有 adb 的 QProcess 输出始终为空

Qt QProcess

使用 QProcess 获取所有正在运行的进程信息