Qt: QObject :: connect: не удается подключиться (null) - PullRequest
8 голосов
/ 04 июня 2011

Я пытаюсь подключить сигнал от QProcess внутри моего mainwindow() объекта к другому QObject основанному классу внутри моего mainwindow() объекта, но я получаю эту ошибку:

QObject::connect: Cannot connect (null)::readyReadStandardOutput () to (null)::logReady()

Вот код, он ни в коем случае не завершен, но я не знаю, почему он не работает.

exeProcess.h

#ifndef EXEPROCESS_H
#define EXEPROCESS_H

#include <QObject>


class exeProcess : public QObject
{
     Q_OBJECT
public:
    explicit exeProcess(QObject *parent = 0);

signals:
    void outLog(QString outLogVar); //will eventually connect to QTextEdit

public slots:
    void logReady();

};

#endif // EXEPROCESS_H

exeProcess.cpp

#include "exeprocess.h"

exeProcess::exeProcess(QObject *parent) :
    QObject(parent)
{
}

void exeProcess::logReady(){
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QProcess>

#include "exeprocess.h"

/*main window ---------------------------------------*/

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QProcess *proc;
    exeProcess *procLog;


public slots:


private:
    Ui::MainWindow *ui;
};




#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(proc, SIGNAL(readyReadStandardOutput ()), procLog, SLOT(logReady()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

Спасибо!.

Ответы [ 2 ]

12 голосов
/ 04 июня 2011

Вам необходимо создать объекты proc и procLog.

У вас есть только указатели в качестве членов класса, поэтому вам придется инициализировать их (с new).connect работает только на живых объектах.

1 голос
/ 07 июня 2011

proc - это указатель, но он ни на что не указывает.Вы должны создать экземпляр процесса qprocess перед его подключением!

proc = new QProcess();
connect(proc, SIGNAL(readyReadStandardOutput ()), procLog, SLOT(logReady()));
...