Qt documentation dice, valori di ritorno dei segnali non sono possibili:Qt: Il valore di ritorno del segnale funziona, perché il documento ufficiale dice che è impossibile/vietato?
segnali sono generati automaticamente dal moc e non devono essere implementate nel file cpp. Non possono mai avere tipi di reso (ad esempio use void).
correlati SO domande:
Tuttavia, dai miei studi (Qt 4.8.1) posso dire valori di ritorno do lavoro:
- Se il segnale/slot sono nello stesso thr ead, ConnectionType può essere
Qt::AutoConnection
- Con segnale/slot diversi thread ho bisogno di usare
Qt::BlockingQueuedConnection
Quindi, nel mio codice che io chiamo un segnale da
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
e la moc segnale restituisce un QString
,
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
Questa ecco la moc fessura dove passa indietro il QString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
Tutto ciò sembra essere abbastanza semplice, quindi perché questa contraddizione con la documentazione? Dove dovrebbe essere il problema usando il valore di ritorno? Come detto, nel mio codice sembra funzionare.
cosa succede se il segnale è collegato a più slot? –
In un'altra domanda simile la risposta dice: "Sembra possibile, sono stato in grado di emettere un segnale e ricevere un valore dallo slot a cui era collegato il segnale, ma il problema era che restituiva solo l'ultimo valore di ritorno dal più slot connessi ". Deve essere la ragione per cui non vogliono pubblicizzare questa funzione –
@RomanSaveljev - dovrebbe anche bloccare fino a quando lo slot non è stato completato? –