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..
- Check if your class inherits
QObject
or any derived class from QObject- Append
Q_OBJECT
macro inside the class definition- Append
slots
orQ_SLOTS
after your private/protected/public keyword for your event- 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