使用qtwinmigrate删除QtQuick模型
我正在使用qtwinmigrate和Qt 5.12.5在Win32应用程序中显示Qt快速控件 更具体地说,我有一个指向dll的C接口,在这里我托管了一个QQmlEngine实例,该实例通过QQuickWidget呈现内容,我在QWinWidget(QWinMigrate框架的一部分)的帮助下在客户端应用程序中显示了QQuickWidget 如果我不删除模型对象,那么每次隐藏并显示小部件时都会出现内存泄漏,即使我不重新创建模型对象,而是重用池中的旧对象。我怀疑旧的QML对象正在泄漏 由于deleteLater()无法工作,因为缺少执行QApplication事件循环的主Qt线程,所以我用谷歌搜索了删除模型对象的下一种方法:使用qtwinmigrate删除QtQuick模型,qt,qt-quick,Qt,Qt Quick,我正在使用qtwinmigrate和Qt 5.12.5在Win32应用程序中显示Qt快速控件 更具体地说,我有一个指向dll的C接口,在这里我托管了一个QQmlEngine实例,该实例通过QQuickWidget呈现内容,我在QWinWidget(QWinMigrate框架的一部分)的帮助下在客户端应用程序中显示了QQuickWidget 如果我不删除模型对象,那么每次隐藏并显示小部件时都会出现内存泄漏,即使我不重新创建模型对象,而是重用池中的旧对象。我怀疑旧的QML对象正在泄漏 由于delet
QApplication::postEvent(m_Model, new QDeferredDeleteEvent());
Application::sendPostedEvents(0, QEvent::DeferredDelete);
它似乎运行良好,一切正常,没有内存泄漏。不幸的是,我最近发现,有时它会导致调用_ufastfail并显示下一条消息:
对象的一个QML信号处理程序正在进行时被销毁。
对象很可能是同步删除的(使用
QObject::deleteLater()),或者应用程序正在运行
嵌套事件循环。不支持此行为
在删除之前对这些对象调用disconnect()没有帮助
尝试在dll中创建QThread,将QApplication实例移动到此线程,并通过对其调用exec()运行其事件循环,然后对模型对象调用deleteLater()通常也会失败。在这种情况下,未删除模型对象。不过我可能做错了什么
你有什么建议我该怎么处理这个问题
谢谢
UPD:
我已经尝试再次重新实现“in-dll-QThread”方法,因为我第一次肯定是错的。现在,所有内容都已创建并存在于该线程中,但我无法显示控件: