Qt:从C++到QML引擎抛出异常

Nul*_*lik 5 c++ qt qml qt5

当调用从函数中Q_INVOKABLE写入的方法时,如何抛出异常?该方法由类型的对象拥有,通过调用注册C++JavaScriptQML< MyApp >qmlRegisterType()

例如,我有以下QML代码:

TextField {
    id: fld_recipient

    onEditingFinished: {
        try {
            var identity=myapp.identities.current_Identity;
            var company=identity.companies.current_Company;
            myapp.lookup_email(identity.identity_id,company.company_id,fld_recipient.text)
        } catch(e) {
            console.log(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里,方法MyApp :: lookup_email()进入服务器并搜索匹配的电子邮件地址.这个过程可以通过大量错误来停止,我希望catch()语句显示该错误.

这是如何在C++方面完成的?有点像这样:

void MyApp::lookup_email(int identity_id,int company_id,QString email) {

    ....

    error_code=server->lookup_email(identity_id,company_id,email);

    if (error_code) { /// throw an exception to QML engine, 
         ????? <= what goes here ?
    }
}
Run Code Online (Sandbox Code Playgroud)

Th.*_*ann 3

Qml 不应包含任何业务逻辑,而应仅显示任何结果。如果您的应用程序遇到异常状态,则捕获业务逻辑中的异常并向用户呈现结果/新状态。

如果您假设您的(UI)代码将使用不完整的数据调用,您应该忽略它。或者在调试级别使用断言。