【发布时间】:2019-08-14 05:32:55
【问题描述】:
一般来说,从 QML 访问 C++ 函数很容易。使用 qmlRegisterType 可以实例化和访问 C++ 类。
但如果我这样做,这个 C++ 函数就不会与 C++ 项目的其余部分连接。就我而言,我使用Singletons 来访问项目的特定部分。有没有其他更好的方法可以将此 C++ 后端与项目的其余部分连接起来?
【问题讨论】:
一般来说,从 QML 访问 C++ 函数很容易。使用 qmlRegisterType 可以实例化和访问 C++ 类。
但如果我这样做,这个 C++ 函数就不会与 C++ 项目的其余部分连接。就我而言,我使用Singletons 来访问项目的特定部分。有没有其他更好的方法可以将此 C++ 后端与项目的其余部分连接起来?
【问题讨论】:
您也可以将 C++ 端单例返回到 QML 端(注意这是 C++11):
在你的主要:
MyBackend *myBackend = new MyBackend();
qmlRegisterSingletonType<MyBackend>("my.namespace", 1, 0,
[=](QQmlEngine *eng, QJSEngine *js) -> QObject *
{
eng->setObjectOwnership(myBackend, QQmlEngine::ObjectOwnership::CppOwnership);
return myBackend;
}
);
注意,这是面向依赖注入的,您在中心位置有一个实例并将其分发给需要它的类,而不是在某个地方有一个可能导致所有问题的静态实例。如果您坚持,您仍然可以重写为静态实例。
【讨论】: