Qt documentation dice, valores de retorno de las señales no son posibles:Qt: El valor de retorno de la señal funciona, ¿por qué el documento oficial dice que es imposible/prohibido?
señales son generadas automáticamente por el MOC y no deben ser implementar en el archivo .cpp. Nunca pueden tener tipos de devolución (es decir, use void).
relacionados SO preguntas:
Sin embargo, a partir de mis ensayos (Qt 4.8.1) que puedo decir valores de retorno hacen el trabajo:
- Si la señal/ranura están en el mismo thr ead, ConnectionType puede ser
Qt::AutoConnection
- Con relación señal/ranura en diferentes hilos que necesito para usar
Qt::BlockingQueuedConnection
Así que en mi código que llamo una señal por
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
y la moc señal vuelve un QString
,
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
Este aquí es el moc ranura donde pasa de nuevo el QString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
Todo esto parece ser bastante directo, entonces ¿por qué esta contradicción con la documentación? ¿Dónde estaría el problema al usar el valor de retorno? Como dije, en mi código esto parece funcionar.
¿Qué sucede si la señal está conectada a múltiples ranuras? –
En otra pregunta similar, la respuesta dice: "Parece que esto es posible. Pude emitir una señal y recibir valor de la ranura a la que estaba conectada la señal. Pero el problema fue que solo devolvió el último valor de retorno del múltiples ranuras conectadas ". Debe ser la razón por la que no desean anunciar esta función –
@RomanSaveljev. ¿También debería bloquear hasta que la ranura se haya completado? –