К сожалению, в QtWebKit на данный момент невозможно сделать это более чистым способом. Были некоторые попытки добавить полные привязки JavaScript <-> C ++ к QtWebKit поверх QtScript, но я не уверен, каков прогресс в этом.
Это означает, что вы остались с двумя упомянутыми вами решениями (но я настоятельно рекомендую избегать первого, поскольку оно хакерское и не работает с объектами анонимных функций).
Другим решением было бы создать два сигнала: conditionSatisfied () и conditionFailed () и подключить их к func1, func2 соответственно:
function func1() { ... }
function func2() { ... }
object.conditionSatisfied.connect(func1);
object.conditionFailed.connect(func2);
Затем, на стороне C ++:
void X::testFunc(const QVariant& cond)
{
if (cond.toInt() == 1)
emit conditionSatisfied();
else
emit conditionFailed();
}
Это не очень хороший дизайн, но вы не можете сделать лучше.