在槽中获取 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()'