我的小程序有问题(我是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
提前致谢
答案 0 :(得分:1)
将QProcess *process
移至标题,并在构造函数中使用process = new QProcess(this)
对其进行初始化。这样你就可以在你的插槽中访问它。
答案 1 :(得分:1)
QProcess *process = new QProcess(this);
声明于:
void processGui::on_startProcess_clicked()
这是一个范围问题,process是一个在整个类中不可用的局部变量。
答案 2 :(得分:0)
您可以使用QProcess
访问插槽内的sender()
对象,如下所示:
void processGui::getOutput()
{
QProcess* process = qobject_cast<QProcess*>(sender());
QByteArray strdata = process->readAllStandardOutput();
}