Qt signals and slots in different classes

Remember that connections are not between classes, but between instances. If you emit a signal and expect connected slots to be called, it must be emitted on an instance on which the connection was made. That's your problem.

Assuming Y is a Singleton:

If you do connect( Y::getInstance(), ... )

and Y::getInstance() does new Y() at some point, then the constructor of Y is called before the connection is set up. Like that, the signal will be emitted but the slot will not listen to it yet.

Apart from that, it would be best to do one of the following things, though you could not emit the signal in the constructor of Y with these approaches:

  • Use a third class Z that knows both X and Y, and do the connection there
  • Dependency Injection. That means X gets an instance of Y in its constructor:

Example for a Dependency Injection Constructor:

X::X( Y* const otherClass ) {     connect( otherClass, SIGNAL( ... ), this, SLOT( ... ) }

你可能感兴趣的:(Qt signals and slots in different classes)