Аналогично решению QTimer, но с тем преимуществом, что вы можете передавать аргументы, есть способ QMetaObject :: invokeMethod:
QString SomeClass::compute(const QString&, int, double);
...
QMetaObject::invokeMethod(obj, "compute", Qt::QueuedConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "sqrt"),
Q_ARG(int, 42),
Q_ARG(double, 9.7));
QueuedConnection ставит его в очередь в цикле событий, DirectConnection сразу же выполнит его.