Qtのドキュメントによると、シグナルの戻り値は不可能です。
シグナルはmocによって自動的に生成されるため、.cppファイルに実装しないでください。リターンタイプを持つことはできません(つまり、voidを使用します)。
関連するSOの質問:
ただし、私の試行(Qt 4.8.1)から、戻り値が機能することがわかります。
- 信号/スロットが同じスレッドにある場合、ConnectionTypeは次のようになります。
Qt::AutoConnection
- 異なるスレッドの信号/スロットで使用する必要があります
Qt::BlockingQueuedConnection
だから私のコードでは、私はシグナルを呼び出します
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
信号mocは、を返しますQString
。
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
これは、それが戻るスロットモックですQString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
これらはすべて非常に簡単なようですが、なぜこのドキュメントとの矛盾があるのでしょうか。戻り値を使用する場合の問題はどこにありますか?言ったように、私のコードではこれはうまくいくようです。