[英]Throwing an exception from Q_INVOKABLE method?
尝试了解基于Qt / QML的应用程序的最佳做法,其中我们将方法标记为Q_INVOKABLE
。 如果我们从这些方法之一中抛出异常,后果将是什么?
class Class
{
...
Q_INVOKABLE void method() { throw std::logic_error(); }
};
QML可以处理此错误,还是会使程序崩溃?
Q_INVOKABLE
宏只是标记该函数,以便可以使用QMetaObject::invokeMethod()
来调用它。 它并没有真正改变Qt中处理异常的方式。
为此,区分通过连接调用的插槽和直接作为常规函数调用的插槽是很重要的。 如果通过信号插槽连接调用方法,则除非您实际在插槽中处理该异常,否则将无法定义引发异常时的处理方式。 即, 必须在插槽中输入:
void Class::method() {
try {
// code that might throw logic_error
} catch (std::logic_error &err) {
}
}
您不能省略catch()
语句。
另一方面,如果直接将方法作为函数调用,则可以使用裸机。 但是,无论在何处调用该方法,都必须捕获并处理它。 即,您必须写:
try {
obj.method();
catch (std::logic_error &err) {
// error-handling
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.