Qt :Возвращаемое значение сигнала работает, почему официальный документ говорит, что это невозможно/запрещено?

В документации Qt сказано, что возврат значений сигналов невозможен:

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).

Связанные с SO вопросы:

  1. Могут ли сигналы Qt возвращать значение?
  2. Qt :значение возвращаемого значения слота?

Однако из моих испытаний (Qt 4.8.1 )я могу сказать, что возвращаемые значения работают:

  1. Если сигнал/слот находятся в одном потоке, ConnectionType может бытьQt::AutoConnection
  2. С сигналом/слотом в разных потоках мне нужно использоватьQt::BlockingQueuedConnection

Итак, в моем коде я вызываю сигнал по

QString dp = emit WscAircrafts::signalAircraftsJsonArray();

и сигнал moc возвращает QString,

QString _t0;
void *_a[] = { const_cast(reinterpret_cast(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;

Это слот moc, где он передает обратноQString

case 4: { QString _r = _t->slotAircraftJsonArray();
  if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; }  break;

Все это кажется довольно прямолинейным, так почему же это противоречие с документацией? В чем может быть проблема с использованием возвращаемого значения? Как я уже сказал, в моем коде это работает.

8
задан Community 23 May 2017 в 11:51
поделиться