QObject connection function

You probably forgot to use the Q_OBJECT macro. Every class that implements its own slots/signals needs that macro. Don't forget that you need to add your header/source file to the .pro file.


One thing to note; since you're using Qt 5, there's a new signal slot connection syntax, which will allow you to specify any function and not just those defined as slots.

In this situation you can do this: -

connect(network_manager, &QNetworkAccessManager::finished, this, &Class1::finishedSlot);

What's great about this syntax is that you just specify the address of the function and don't bother about the parameters, so if you change them in a function, you don't need to update them in the connect statements.

You still should be using the Q_OBJECT macro though and you can read more about the new syntax here.


I share another possible problem here as this post is the top most in google search.

In addition to add Q_OBJECT, you must also add public slots: or public Q_SLOTS: for your customized event. Otherwise, you'll still encounter the QObject::connect: No such slot error.

I give a brief summary here according to Zeta's post and the other post

To solve “No such slot” error, you must check..

  1. Check if your class inherits QObject or any derived class from QObject
  2. Append Q_OBJECT macro inside the class definition
  3. Append slots or Q_SLOTS after your private/protected/public keyword for your event
  4. If you do check 1-3, then clean, run qmake, and rebuild again to make sure all your things in 1-3 are generated by moc.

Finally, a example here:

class MyClass: public QObject { //check 1
     Q_OBJECT //check 2

   public slots: //check 3
     void onEvent(int);
};

Hope this saves others' life