Boost.Signals允许使用槽的返回值来形成信号的返回值的各种策略。例如添加它们,形成vector
它们,或返回最后一个。
普遍的智慧(在 Qt 文档[编辑:以及对此问题的一些答案]中表达)是 Qt 信号不可能发生这样的事情。
但是,当我在以下类定义上运行 moc 时:
class Object : public QObject {
Q_OBJECT
public:
explicit Object( QObject * parent=0 )
: QObject( parent ) {}
public Q_SLOTS:
void voidSlot();
int intSlot();
Q_SIGNALS:
void voidSignal();
int intSignal();
};
moc 不仅没有抱怨返回类型为非 void 的信号,而且似乎以允许返回值传递的方式积极地实现它:
// SIGNAL 1
int Object::intSignal()
{
int _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 1, _a);
return _t0;
}
所以:根据文档,这件事是不可能的。那么 moc 在这里做什么呢?
插槽可以有返回值,那么我们现在可以将带有返回值的插槽连接到带有返回值的信号吗?毕竟,这可能吗?如果有,有用吗?
编辑:我不是要求解决方法,所以请不要提供任何解决方法。
编辑:它显然在Qt::QueuedConnection
模式下没有用(虽然QPrintPreviewWidget API也没有,但它仍然存在并且很有用)。但是Qt::DirectConnection
和Qt::BlockingQueuedConnection
(或者Qt::AutoConnection
,当它解析为 时Qt::DirectConnection
)呢?