QObject connection function

情到浓时终转凉″ 提交于 2019-11-27 23:29:24

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 QObject, 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 QObject 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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!