2013-06-27 72 views
0

我有一個小程序的問題(我是一個初學者與c + +和qt)。 開啓按鈕時,它會用qprocess啓動一個cli應用程序,只要cli應用程序將其寫入標準輸出或標準錯誤,輸出應該顯示在文本字段中。得到qprocess輸出在插槽

我讀到,它是一個好主意,使用信號和插槽,但它不工作。

編譯器會引發在我插槽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)它。這樣你可以在你的插槽中訪問它。

+0

謝謝。那樣做了。 – arkhon

1
QProcess *process = new QProcess(this); 

聲明中:

void processGui::on_startProcess_clicked() 

這是一個範圍問題,過程是整個類中沒有提供一個局部變量。

+0

我用thugas的建議修復了它。我認爲連接使得該過程在插槽中可用,但你是對的。感謝您的解釋。 – arkhon