When I try to emit readAllStandardOutput() to a QString im getting an unexpected program crash, even if i connvert the QByteStream to a QString, any idea why that is? heres teh source
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QProcess>
#include <QString>
#include "exeprocess.h"
/*main window ---------------------------------------*/
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QProcess *proc;
signals:
void outLog(QString outLogVar); //plug this into the QTextEdit box
public slots:
void logReady(); // plug the QProcess into this
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include <QByteArray>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QProcess *proc = new QProcess; //initialize proc
QStringList arguments;
arguments << "-h";
connect(proc, SIGNAL(readyReadStandardOutput ()), this, SLOT(logReady()));
proc->start("/Applications/Graphics/3Delight-9.0.87/bin/renderdl", arguments);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::logReady(){
QString str = proc->readAllStandardOutput();
emit outLog(str);
}
Thanks!
This line is the problem:
You’re shadowing the member variable by reusing that name. When logReady is called, the ‘proc’ that you call readAllStandardOutput() on is a different (null) pointer and so everything crashes. The fix is simple: replace the above line with