Hi,

I'm exporting some functions to the JS environment in which an error may
occur. I'd like to get that error back to the JS environment as an
exception. I first posted this question on
https://forum.qt.io/topic/52437/catching-error-thrown-in-c-code-in-js, but
was redirected here.

class Math : public QObject
{
    Q_OBJECT
public:
    Math(QObject *parent=0);

    Q_INVOKABLE void Sqrt(int arg) {
        if (arg < 0) {
            // Do something here that causes an exception in the js
environment
            throw "InvalidArgException";
        }
    }
};

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);
    QJSEngine eng(&app);
    Math math(&app);
    eng.globalObject().setProperty("Math", eng.newQObject(&math));
    eng.evaluate("try { Math.Sqrt(-1); } catch(e) { console.log(e); }");
}

The following code found in tests/auto/qml/qqmlecmascript/testtypes.cpp
would do the trick, unfortunately, this requires the use of internals.
Maybe a method could be added to the QJSEngine public API to wrap
engine()->currentContext()->throwError() ?

void MyQmlObject::v8function(QQmlV4Function *function){
    
V8Engine::getV4(function->engine())->currentContext()->throwError(QStringLiteral("Exception
thrown from within QObject slot"));
}

Or did I miss a way to accomplish that with the current API ?

Thanks
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to