Qt documentation mówi zwracane wartości sygnałów nie są możliwe:Qt: Wartość zwracana sygnału działa, dlaczego oficjalny dokument mówi, że jest to niemożliwe/zabronione?
Sygnały są generowane automatycznie przez MOC i nie musi być realizowane w pliku .cpp. Nigdy nie mogą mieć typów zwracanych (tj. użyć pustych).
Podobne SO pytania:
Jednak z moich prób (Qt 4.8.1) Mogę powiedzieć wartości zwracanych zrobić pracę:
- Jeśli sygnał/gniazdo są w tym samym thr EAD, ConnectionType może być
Qt::AutoConnection
- z sygnału/gniazdo w różnych wątkach muszę korzystać
Qt::BlockingQueuedConnection
Więc w moim kodu Wzywam sygnał przez
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
i moc sygnału zwraca QString
,
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
to tutaj jest moc gniazdo gdzie przechodzi z powrotem QString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
Wszystko to wydaje się być dość proste, więc dlaczego ta sprzeczność z dokumentacją? Gdzie byłby problem z wykorzystaniem zwracanej wartości? Jak powiedzieliśmy, w moim kodzie to wydaje się działać.
co się dzieje, jeśli sygnał jest podłączony do wielu gniazd? –
W innym podobnym pytaniu odpowiedź brzmi: "Wygląda na to, że byłem w stanie wyemitować sygnał i odebrać wartość z gniazda, do którego podłączony był sygnał, ale problem polegał na tym, że zwrócił on tylko ostatnią wartość zwracaną przez wiele połączonych gniazd ". To musi być powód, dla którego nie chcą reklamować tej funkcji. –
@RomanSaveljev - czy musiałby również zablokować, dopóki nie skończy się miejsce na slocie? –