Order of slots called on QObject
Asked Answered
B

4

41

I have a QObject that has multiple slots connected to one of its signals. Is there an order in which of each of these slots are called when the signal is emitted?

Bracy answered 7/8, 2009 at 20:51 Comment(0)
S
61

In Qt v4.5 and earlier: No, the order is undefined as can be seen in the documentation here:

If several slots are connected to one signal, the slots will be executed one after the other, in an arbitrary order, when the signal is emitted.

Edit: From version 4.6 onwards this is no longer true. Now the slots will run in the order they are connected. The relevant paragraph of the current documentation:

If several slots are connected to one signal, the slots will be executed one after the other, in the order they have been connected, when the signal is emitted

Sandhog answered 7/8, 2009 at 20:56 Comment(3)
@Hossein My answer was correct until QT version 4.6. If you look at the date of the question (and my answer), you'll see that it was the correct answer when the question was asked. Note that Yaroslav's answer was posted more than a year later.Sandhog
OK, sorry I didn't mean to undervalue your post. Since this question appeared as the first result of the Google search I did, I wanted to stop further readers from confusing.Admissive
you need to use Queued Connections in order to this to be true for different threads. Just saying.Oecology
C
12

According to Qt documentation:

If several slots are connected to one signal, the slots will be executed one after the other, in the order they have been connected, when the signal is emitted.

http://qt-project.org/doc/qt-4.8/signalsandslots.html

Culet answered 13/12, 2010 at 20:55 Comment(0)
H
2

While the order is undefined, up to now, in all Qt versions it has been connect() order, except when Qt::QueuedConnection is used, in which case, of course, it's not even guaranteed that any or all slots have been executed when emit returns. Relying on the order is still discouraged, though.

Hoodoo answered 8/8, 2009 at 9:9 Comment(0)
O
1

Relying on what order the slots will be executed is a bad, bad idea, as it defeats both the spirit of the signals/slots connections and leaves you wide open for undesired behavior if you do any sort of programmatic connections of signals & slots.

Oxytocic answered 25/2, 2011 at 22:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.