Os sinais Qt podem retornar um valor?
Boost.Signals permitestratégias divers de usar os valores de retorno dos slots para formar o valor de retorno do sinal. Por exemplo. adicionando-os, formando umvector
fora deles ou retornando o últim
O senso comum (expresso na documentação Qt[EDITAR, bem como algumas respostas a esta pergunta]) é que isso não é possível com os sinais Qt.
No entanto, quando executo o moc na seguinte definição de classe:
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();
};
Não apenas o moc não reclama do sinal com o tipo de retorno não nulo, parece implementá-lo ativamente de forma apermiti um valor de retorno a ser passado:
// 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;
}
Então: de acordo com os documentos, isso não é possível. Então, o que o moc está fazendo aqui?
Slots podem ter valores de retorno, então podemos conectar um slot com um valor de retorno a um sinal com um valor de retorno agora? Afinal, isso é possível? Se sim, é útil?
EDITAR Não estou solicitando soluções alternativas; portanto, não forneça nenhum
EDITAR Obviamente não é útil emQt::QueuedConnection
(também não é oPI @QPrintPreviewWidget, no entanto, e ainda existe e é útil). Mas eQt::DirectConnection
eQt::BlockingQueuedConnection
(ouQt::AutoConnection
, quando resolver paraQt::DirectConnection
).