Object::connect: No such slot QApplication::foo



  • Hello all,

    I am writing an application, and I have ran into a strange problem. (At least it is trange for me.) I have done the similar trick in many times in this application and always went fine. The problem is possibly with me, but I could not solved it for a while, so I would like to ask you to review it. Rebuilding was also tried out.

    So I have a class:
    @#ifndef EGGFINDER_H
    #define EGGFINDER_H

    #include <QObject>
    #include "mapitems.h"
    #include "settings.h"

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

    private:
    QList<PyramidItem*> m_pyramids;
    void addPyramid(PyramidItem p) {m_pyramids.append(p);}
    void checkPyramid(PyramidItem
    );
    QImage *m_currentImage;

    signals:

    public slots:
    void foo(double a, double b);
    void newImageReceieved(QImage*);
    };

    #endif // EGGFINDER_H
    @

    An the implementation:
    @#include "eggfinder.h"
    #include <QImage>
    #include <QPainter>
    #include <QDebug>

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

    void EggFinder::checkPyramid(PyramidItem *pyramid)
    {
    QImage pyramidImage(pyramid->boundingRect().size().toSize(), QImage::Format_ARGB32);
    pyramidImage = m_currentImage->copy(pyramid->boundingRect().toRect());
    pyramidImage.save("out.png");
    }

    void EggFinder::foo(double a, double b)
    {
    qWarning() << a << b;
    }

    void EggFinder::newImageReceieved(QImage* img)
    {
    m_currentImage = img;
    foreach (PyramidItem *pyramid, m_pyramids) {
    checkPyramid(pyramid);
    break;
    }
    }@

    I creating an instance in my MainWindow from it:

    @m_eggFinder = new EggFinder(this);@

    And here is where I am trying to connect to the object's slots:

    @
    void MainWindow::imageGrabberChanged(QImageGrabber ng)
    {
    currentGrabber = ng;
    disconnect(ui->graphicsViewMap, SLOT(newImageReceieved(QImage
    )));
    disconnect(m_imgProc, SLOT(newImageReceieved(QImage*)));
    disconnect(m_eggFinder, SLOT(newImageReceieved(QImage*))); // this is row 356
    connect(ng, SIGNAL(newImageGrabbed(QImage*)), ui->graphicsViewMap, SLOT(newImageReceieved(QImage*)));
    connect(ng, SIGNAL(newImageGrabbed(QImage*)), m_imgProc, SLOT(newImageReceieved(QImage*)));
    connect(ng, SIGNAL(newFPSCalculated(double,double)), this, SLOT(newFPSCalculated(double, double)));
    connect(ng, SIGNAL(newImageGrabbed(QImage*)), m_eggFinder, SLOT(newImageReceieved(QImage*))); // this is line 360
    connect(ng, SIGNAL(newFPSCalculated(double,double)), m_eggFinder, SLOT(foo(double,double))); // and this is 361
    }@

    An in the command line output it says the following, and of course he connections did not made:
    @Object::disconnect: No such slot QApplication::newImageReceieved(QImage*) in src/mainwindow.cpp:356
    Object::disconnect: (sender name: 'MainWindow')
    Object::disconnect: (receiver name: 'egger_controller')
    Object::connect: No such slot QApplication::newImageReceieved(QImage*) in src/mainwindow.cpp:360
    Object::connect: (receiver name: 'egger_controller')
    Object::connect: No such slot QApplication::foo(double, double) in src/mainwindow.cpp:361
    Object::connect: (receiver name: 'egger_controller')@

    The m_imgProc is similarly declared, implemented as my EggFinder class, and it is working.



  • show me the line 356,360 and 361 of code .



  • Check the code snipplet below the line:

    bq. And here is where I am trying to connect to the object’s slots:

    I have marked the problematic lines.



  • What is egger_controller? Are you sure m_eggFinder is the type you think it is?



  • The egger_controller is the name of my application.
    Yes the m_eggfinder is declared in this way:

    @ EggFinder *m_eggFinder;@



  • Wahhh. Finally I have figured out what caused the problem.
    The imageGrabberChanged method gets called before the m_eggFinder instance created.
    I have no idea why did not caused SIGSEV ever.

    Thank you very much for your help!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.