Podczas wywoływania metody Q_INVOKABLE
zapisanej w C++
z funkcji JavaScript
w QML
, w jaki sposób można wygenerować wyjątek? Metoda jest własnością obiektu typu <MyApp>
, zarejestrowane rozmowy qmlRegisterType()
Qt: Zgłaszanie wyjątku od silnika C++ do QML
Na przykład, mam następujący kod 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);
}
}
}
Tutaj metoda MojaApl :: lookup_email() idzie do serwer i szuka pasujących adresów e-mail. Ten proces może zostać zatrzymany przez dużą ilość błędów i chcę, aby instrukcja catch() pokazywała ten błąd.
Jak to zrobić po stronie C++? Rodzaj podobny do tego:
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 ?
}
}
Po prostu zwróć pusty ciąg znaków, jeśli wystąpi błąd, a w QML sprawdź, czy ciąg rzeczywiście zawiera wiadomość e-mail. – dtech
Również ten http://lists.qt-project.org/pipermail/interest/2015-April/016652.html – dtech
@ddriver, dzięki! – Nulik