Qt: Valor de retorno do sinal funciona, por que o documento oficial está dizendo que é impossível / proibido?
Documentação Qt diz, valores de retorno de sinais não são possíveis:
Os sinais são gerados automaticamente pelo moc e não devem ser implementados no arquivo .cpp. Eles nunca podem ter tipos de retorno (isto é, usar void).
Perguntas SO relacionadas:
Os sinais Qt podem retornar um valor?Qt: significado do valor de retorno do slot?No entanto, das minhas tentativas (Qt 4.8.1), posso dizer que os valores de retorno funcionam:
Se o sinal / slot estiver no mesmo encadeamento, ConnectionType poderá serQt::AutoConnection
Com sinal / slot em diferentes threads eu preciso usarQt::BlockingQueuedConnection
Então, no meu código eu chamo um sinal de
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
e o sinal moc retorna umQString
,
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
Este aqui é o slot moc onde passa de volta oQString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
Tudo isso parece ser bastante direto, então por que essa contradição com a documentação? Onde seria o problema usando o valor de retorno? Como dito, no meu código isso parece funcionar.