gpt4 book ai didi

c++ - 与 QML 共享 C++ 对象实例

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:24 24 4
gpt4 key购买 nike

我在 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 来解决它,但我正在寻找更优雅的解决方案。

最佳答案

另一种选择是将 QQmlContext 存储在单例对象中

然后,注册对象

SingletonContext::instance()->Context()->setContextProperty("Plclink",&m_link );

问题是我可以从 QTCreator 访问函数,并且 Q_ENUM 变量没有注册

例子:使用 setContextProperty

onActivated: {
Plclink.setvaluechanged(Plclink.DB_PROGRAMA ,Plclink.DBW_ENCURSO,index )
}

失败(Q_ENUM DB_PROGRAMA 始终为 0)

但是用

static plclink *slink=&m_link;
qmlRegisterSingletonType<plclink>("Plclink", 1, 0, "Plclink", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
Q_UNUSED(engine) Q_UNUSED(scriptEngine)
return slink;
});

  import Plclink 1.0

工作正常

关于c++ - 与 QML 共享 C++ 对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com