Qt documentation says, return values of signals are not possible:
Signals are automatically generated by the moc and must not be implemented in the .cpp file. They can never have return types (i.e. use void).
Related SO questions:
- Can Qt signals return a value?
- Qt: meaning of slot return value?
However, from my trials (Qt 4.8.1) I can tell return values do work:
- If signal / slot are in the same thread, ConnectionType may be
Qt::AutoConnection
- With signal / slot in different threads I need to use
Qt::BlockingQueuedConnection
So in my code I call a signal by
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
and the signal moc returns a QString
,
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
This here is the slot moc where it passes back the QString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
All of this seems to be pretty much straight forward, so why this contradiction with the documentation? Where would be the problem using the return value? As said, in my code this seems to work.