0

小さなプログラムに問題があります (私は 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

前もって感謝します

4

3 に答える 3

1
 QProcess *process = new QProcess(this);

で宣言されています:

void processGui::on_startProcess_clicked() 

これはスコープの問題です。プロセスは、クラス全体で使用できないローカル変数です。

于 2013-06-27T09:06:17.913 に答える
1

QProcess *processヘッダーに移動しprocess = new QProcess(this)、コンストラクターで初期化します。そうすれば、スロットでアクセスできます。

于 2013-06-27T09:05:51.970 に答える