Qt documentation說,信號返回值是不可能的:Qt:信號的返回值爲什麼官方文檔說它是不可能的/禁止的?
信號由商務部自動生成的,不得在.cpp文件中實現 。它們不能有返回類型(即 使用void)。
相關SO問題:
然而,從我的考驗(QT 4.8.1)我可以告訴返回值做的工作:
- 如果信號/插槽處於相同的thr EAD,ConnectionType可能是在不同的線程我需要使用
Qt::BlockingQueuedConnection
所以在我的代碼通過
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
呼叫的信號,並且信號MOC返回QString
Qt::AutoConnection
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
這裏是slot moc,它傳遞迴QString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
所有這些看起來都非常直截了當,所以爲什麼與文檔相矛盾?使用返回值的問題在哪裏?如上所述,在我的代碼中,這似乎工作。
如果信號連接到多個插槽會發生什麼? – 2012-08-09 19:44:48
在另一個類似的問題答案中它說:「看起來這是可能的,我能夠發出一個信號,並從信號所連接的插槽接收值,但問題是它只返回來自多個連接的插槽「。必須是他們不希望宣傳此功能的原因 – 2012-08-09 19:45:18
@RomanSaveljev - 它是否也必須阻止,直到插槽完成? – 2012-08-09 19:48:04