解决“Object destroyed while one of its QML signal handlers is in progress.”错误

在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

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注