Search code examples
qtsignals-slots

Qt connect "no such slot" when slot definitely does exist


Qt v4.8.0, VC2010 compiler

I have a QMainWindow based class and I'm trying to send it signals involving QUuid

However, every time I run it I get the errors:

Object::connect: No such slot MainWindow::on_comp_connected(QUuid) in ..\..\src\mainwindow.cpp:143
Object::connect:  (receiver name: 'MainWindow')

It's driving me potty as the slot definitely does exist (it's in the moc_)

class MainWindow : public QMainWindow
{
Q_OBJECT

// SNIP private typedefs

public:
    MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MainWindow();
// SNIP public methods

signals:
   void testSendQuuid(const QUuid &qcid);

public slots:
   void on_comp_connected(const QUuid &qcid);

private:
// SNIP private parts

QOpenAcnController *acnInt;  // This is where the signal comes from

};

At the end of the MainWindow constructor (the line 143 mentioned) I have:

connect(acnInt, SIGNAL(callback_comp_connected(QUuid)),
        this, SLOT(on_comp_connected(QUuid)));

Given that the slot is definitely there in the moc_mainwindow.cpp (I checked, it's slot #1), what on earth could be stopping the connection happening?

If I try to connect the testSendQuuid(QUuid) signal to the slot, I get no such signal and no such slot as well.

I cannot for the life of me figure out why Qt is denying the existence of a slot that is most definitely there!


Solution

  • Check whether whether that moc_mainwindow.cpp is in your Build Path. Or you are using some other moc_window.cpp file. Because, for ex: In QtCreator, it build the source to a new build directory. And also it uses old moc_cpp file(s) if you try to open the source in a different location.

    What I am trying to say is the moc file which you checked may contain those slot definition, but compiler might be using some other moc file which was created earlier.