【发布时间】:2018-09-21 13:23:06
【问题描述】:
我在 C++11 中有一个逻辑业务,我需要使用 QML UI 公开和共享一些 C++ QObjetcts。
我使用假单例方法通过 lambda 和静态变量公开这些对象:
static classname *static_pointer=&non_singleton_QObject_instance;
qmlRegisterSingletonType<classname>("ClassName", 1, 0, "ClassName",
[](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
Q_UNUSED(engine) Q_UNUSED(scriptEngine)
return static_pointer;
});
它工作正常,但是当应用程序退出时我得到错误,因为
C++ 对象在QQmlApplicationEngine 析构函数之前被QGuiApplication 销毁。
当QQmlApplicationEngine 尝试在他的析构函数中访问这些假单例对象时,我遇到了崩溃。
我可以通过 exit(0) 调用跳过 QQmlApplicationEngine 来解决它,但我正在寻找更优雅的解决方案。
【问题讨论】: