Tengo un QObject que tiene varias ranuras conectadas a una de sus señales. ¿Hay un orden en el que cada una de estas ranuras se llama cuando se emite la señal?Orden de ranuras llamadas en QObject
Respuesta
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
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.
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
No está mal. Depende de la versión de Qt. –
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.
- 1. Qt - Ranuras para padres del widget de llamadas
- 2. error con `QObject` subclase y constructor de copia:` QObject :: QObject (const QObject y) es private`
- 3. 'QObject :: QObject' no puede miembro privado de acceso declarado en la clase 'QObject'
- 4. orden de convocatoria y evaluación de llamadas
- 5. Uso de señales Qt y ranuras con herencia múltiple
- 6. Clonación de QObject
- 7. Visualizar señales QT y ranuras
- 8. QObject :: deleteLater en un QThread
- 9. Orden de método Llamadas en un servicio de Windows
- 10. Cómo utilizar QMetaMethod con QObject :: connect
- 11. qt ranuras de curing
- 12. Uso de ranuras anidados (#)
- 13. QObject Multiple Herencia
- 14. QVariant to QObject *
- 15. QObject (QPlainTextEdit) y problemas de subprocesamiento múltiple
- 16. Ranuras MySQL en PHP/PDO
- 17. ¿Se ejecutarán varias llamadas Control.BeginInvoke/Invoke en orden?
- 18. señales de Qt y ranuras, roscas, app.exec(), y consultas relacionadas
- 19. Llamadas JNI intercaladas con llamadas regulares de Java: ¿cuál es el orden de ejecución?
- 20. Python Decapado ranuras de error
- 21. Qt - ranuras emisoras en lugar de señales
- 22. ¿Por qué usar QObject :: setObjectName()?
- 23. QThread finished() conectado a deletelater de un QObject
- 24. ¿Qt admite ranuras virtuales puras?
- 25. Algoritmo para llenar las ranuras
- 26. Orden del miembro constructor y llamadas al destructor
- 27. Raracidad de acceso variable en un derivado de QObject
- 28. Cómo usar enumeraciones en las señales y ranuras Qt
- 29. Oscilación - reemplazo de la señal Qt/ranuras
- 30. Argumentos de unión a señales/ranuras
@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
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
necesita utilizar las conexiones en cola para que esto sea cierto para diferentes hilos. Solo digo. – smsware