I am currently trying to understand the new QT5 signal/slot syntax
connect(sender, &Sender::valueChanged, [=](const QString &newValue) {
receiver->updateValue("senderValue", newValue);
});
Now my question is where is the address of the receiver SLOT in the above expression ? I wanted to know this because what happens if a signal is in threadA and the slot is in thread B and I wanted it to be a queued connection ?
A slot is a piece of code, it doesn't "live" in a thread - a thread might run it or not, but the code itself doesn't belong to any thread. (If the slot is a member function, then the Qt object defined as the receiver belongs to a Qt thread - that's a property of the object, not the function.)
In the code you have above, the compiler generates an object that:
receiver
by value ([=]
)That object is passed to connect
along with the other two arguments. It's not a QObject
, so it doesn't have an owning thread in the Qt sense. What you need to make sure of is that:
receiver
points to stays alive for as long as that signal is connectedreceiver->updateValue(...)
is thread-safe - it will be called in sender
's context/thread.If receiver->updateValue
needs to be called in receiver
's thread/context, then do not use that syntax for the connect
call, use the one where you specify both sender and receiver, and the connection type.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With