Pregunta

En Qt, ambos son válidos y se comportan igual:

emit someSignal(value);

vs

emit(someSignal(value));

¿Hay alguna diferencia?

¿Fue útil?

Solución

¿Hay alguna diferencia?

No hay ninguna diferencia aparte de que el soporte externo es innecesario, por lo que los programadores lo preferirán, y también se usa de manera más convencional en proyectos Qt.

La razón por la que no hay diferencia se debe a esto:

# define emit

Puedes ver la definición de esto. en el código fuente.

Por lo tanto, básicamente se declara en una cadena "vacía" y el preprocesador reemplazará sus variantes por:

someSignal(value);

o

(someSignal(value));

Podrías comprobarlo tú mismo si, para una prueba rápida, detienes la ejecución del compilador después de ejecutar el preprocesador, p.e.el -E opción en caso de gcc.

Más información:alguien en el comentario tenía dudas sobre la palabra clave emit porque contamina el espacio de nombres de macros global.Eso es cierto, pero es una buena manera de garantizar que exista una manera común de hacerlo, lo cual es bueno.

Por otro lado, esto no es obligatorio, por lo que cualquiera podría redefinirlo, desdefinirlo o incluso desactivarlo. diciéndole a Qt No utilizar palabras clave de la siguiente manera:

CONFIG += no_keywords

De esta manera, aún podría ser posible utilizar el mecanismo de ranura de señal Qt con Q_SIGNAL, Q_SIGNALS, Q_SLOT, Q_SLOTS, Q_EMIT y todo eso.

Aquí puedes encontrar el documentación correspondiente acerca de Q_EMIT, por ejemplo:

Q_EMIT

Utilice esta macro para reemplazar la palabra clave emit para emitir señales, cuando desee utilizar señales y ranuras Qt con un mecanismo de señal/ranura de terceros.

La macro se usa normalmente cuando no_keywords se especifica con la variable CONFIG en el archivo .pro, pero se puede usar incluso cuando no se especifica no_keywords.

Otros consejos

No hay diferencia.De hecho, emit se define como una macro vacía, por lo que solo

someSignal(value);

también es equivalente.El emit solo hace que sea más obvio que estás activando una señal Qt.

No hay absolutamente ninguna diferencia.Es una definición vacía del preprocesador y, por lo tanto, se elimina antes de que el compilador pueda ver el código.En lo que respecta al compilador, ni siquiera existe.

Existe puramente para el beneficio del programador, que le permitirá saber que en ese momento, una señal podría ser procesada y podría ayudar en la depuración del código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top