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;
所有这些似乎非常简单,那么为什么会与文档相矛盾?使用返回值会有什么问题?就像我说的,在我的代码中,这似乎是有效的。