在QML页面中调用C++函数,函数未返回(例如打印预览)时就销毁该QML页面会导致程序崩溃。
解决方式是再写一个C++槽函数,然后原先的函数通过QMetaObject::invokeMethod
方式调用它。例如:
void MyClass::functionA(QString url,QString allParams)
{
QMetaObject::invokeMethod( this, "functionAـreal",Qt::QueuedConnection, Q_ARG( QString, url ), Q_ARG( QString, allParams ));
}
void MyClass::functionAـreal(QString url,QString allParams)
{
.............. 长时间阻塞的逻辑代码
}
注意,functionA_real
必需被slots
标记为槽函数。
slots:
void functionAـreal(QString url,QString allParams);
参考原文:《destroyed while one of its QML signal handlers is in progress》