Насколько я могу судить, невозможно выдать исключение из C ++ для отлова в JavaScript.Я могу предложить несколько обходных путей, но они могут или не могут быть подходящими решениями для вас.Я понимаю, что ни одно из них не является идеальным решением, на которое вы надеялись.
1) Используйте Q_PROPERTY
, чтобы код C ++ мог установить значение, если он хочет вызвать исключение при возврате в JavaScript.JavaScript должен был бы проверить значение, чтобы увидеть, требуется ли исключение при возврате из функции C ++, а затем выбросить его вручную.
2) В том же духе, но, на мой взгляд, немного аккуратнее, было быиспользуйте функцию Q_INVOKABLE
, которая возвращает QString в ваш JavaScript.Если строка не пуста, выведите исключение из JavaScript.
Функция будет определена в заголовочном файле как -
Q_INVOKABLE QString someFunction( int divisor );
Функция будет выглядеть примерно такосновной файл cpp -
QString className::someFunction( int divisor ) {
// Main body of function doing various things
...
...
// Do we need to throw an exception?
if( divisor == 0 )
return "Divide by zero";
...
...
// Function has succeeded so no need to throw an exception
return "";
}
JavaScript будет выглядеть примерно так -
try {
retVal = specialBrowserObject.someFunction( divisor );
if( retVal != "" )
throw new Error( retVal );
} catch (e) {
document.write("Exception: "+e.message);
}
Надеюсь, это поможет.