Qt: Wartość zwracana przez sygnał działa, dlaczego oficjalny dokument mówi, że jest to niemożliwe / zabronione?
Dokumentacja Qt mówi, że zwrotne wartości sygnałów nie są możliwe:
Sygnały są generowane automatycznie przez moc i nie mogą być implementowane w pliku .cpp. Nigdy nie mogą mieć typów zwrotów (tj. Używać void).
Podobne pytania dotyczące SO:
Czy sygnały Qt mogą zwracać wartość?Qt: znaczenie wartości zwrotu w slocie?Jednak z moich prób (Qt 4.8.1) mogę powiedzieć, że wartości zwracane działają:
Jeśli sygnał / gniazdo są w tym samym wątku, może to być ConnectionTypeQt::AutoConnection
Z sygnałem / szczeliną w różnych wątkach muszę użyćQt::BlockingQueuedConnection
W moim kodzie nazywam sygnał przez
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
a sygnał moc zwraca aQString
,
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
To jest gniazdo moc, w którym przechodzi z powrotemQString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
Wszystko to wydaje się całkiem proste, więc dlaczego ta sprzeczność z dokumentacją? Gdzie byłby problem z użyciem wartości zwracanej? Jak już powiedziano, w moim kodzie to wydaje się działać.