2009-08-07 9 views

Respuesta

41

En Qt v4.5 y anteriores: No, el orden no está definido como se puede ver en the documentation here:

Si varias ranuras están conectados a una señal, las ranuras serán ejecutadas una después de la otra, en un orden arbitrario, cuando se emite la señal.

Editar: A partir de la versión 4.6 en adelante esto ya no es cierto. Ahora las ranuras se ejecutarán en el orden en que están conectadas. El párrafo pertinente de the current documentation:

Si varias ranuras están conectados a una señal, las ranuras serán ejecutadas una después de la otra, en el orden en que se han conectado, cuando se emite la señal

+1

@Hossein Mi respuesta fue correcta hasta QT versión 4.6. Si miras la fecha de la pregunta (y mi respuesta), verás que fue la respuesta correcta cuando se hizo la pregunta. Tenga en cuenta que la respuesta de Yaroslav se publicó más de un año después. – sepp2k

+1

OK, lo siento, no quise infravalorar su publicación. Como esta pregunta apareció como el primer resultado de la búsqueda de Google que hice, quise evitar que otros lectores se confundieran. – Hossein

+0

necesita utilizar las conexiones en cola para que esto sea cierto para diferentes hilos. Solo digo. – smsware

2

Mientras que el orden no está definido, hasta ahora, en todas las versiones de Qt ha sido pedido connect(), excepto cuando se usa Qt::QueuedConnection, en cuyo caso, por supuesto, ni siquiera se garantiza que alguno o todos los espacios hayan sido ejecutados cuando emit regrese. Sin embargo, seguir desalentando la orden sigue siendo desalentador.

9

De acuerdo con la documentación de Qt:

Si varias ranuras están conectados entre señal, las ranuras serán ejecutadas una después de la otra, en el orden en que se han conectado, cuando la señal es emitido

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

+2

No está mal. Depende de la versión de Qt. –

0

Basándose en qué orden las ranuras serán ejecutados es una mala mala idea, ya que vence el espíritu de las señales/conexiones ranuras y que deja abierta para que el comportamiento no deseado si lo hace cualquier tipo de conexiones programáticas de las señales & ranuras.

Cuestiones relacionadas