При просмотре источника Qt кажется, что когда слот вызывается из QMetaObject :: invokeMethod, можно указать тип возвращаемого значения и получить возвращаемое значение. (Посмотрите на invokeMethod в справке Qt)
Я не смог найти много примеров того, как это на самом деле используется в источнике Qt. Один, который я нашел, был
bool QAbstractItemDelegate::helpEvent
, который является слотом с типом возврата и вызывается из
QAbstractItemView::viewportEvent
с использованием invokeMethod.
Я думаю, что возвращаемое значение для слота доступно только тогда, когда функция вызывается напрямую (когда это обычная функция C ++) или когда используется invokeMethod. Я думаю, что это действительно предназначено для внутренних функций Qt, а не для обычного использования в программах, использующих Qt.
Edit:
Для примера:
case 8: { int _r = selectPart((*reinterpret_cast< AppObject*(*)>(_a[1])), *reinterpret_cast< int(*)>(_a[2])));
if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break;
вектор _a - это список аргументов, который передается в qt_metacall. Это передается QMetaObject :: invokeMethod. Таким образом, возвращаемое значение в сгенерированном moc-коде сохраняется и передается вызывающей стороне. Таким образом, для нормальных взаимодействий сигнал-слот возвращаемое значение вообще ни для чего не используется. Тем не менее, механизм существует, так что возвращаемые значения из слотов могут быть доступны, если слот вызывается через invokeMethod.