Qt: QObject::connect:无法连接(null)

11

我试图将mainwindow()对象内部的QProcess信号连接到mainwindow()对象内另一个基于QObject的类,但是我遇到了这个错误:

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;
}

谢谢!


我不知道你在使用什么编译器或者标记,但是幸运的是它们甚至是空的。如果它们是一些随机的内存地址的话,那么这个问题就会更加困难。 - Caleb Huitt - cjhuitt
2个回答

14
你需要创建procprocLog对象。
由于类成员只有指针,所以您需要初始化这些指针(使用new)。connect 只能用于活动对象。

我知道了,正如你所猜测的那样,我是StackOverflow的新手。在礼仪方面,我应该为每个新问题开一个新线程,还是在同一线程中跟进相关问题呢? - jonathan topf
@jonathon 为每个问题在stackoverflow上创建一个新的线程 :) - rohanpm

1

proc是一个指针,但它不指向任何东西。在连接它之前,你必须先实例化一个qprocess!

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接