【问题标题】:Connect QML with C++ without Singleton在没有 Singleton 的情况下将 QML 与 C++ 连接起来
【发布时间】:2019-08-14 05:32:55
【问题描述】:

一般来说,从 QML 访问 C++ 函数很容易。使用 qmlRegisterType 可以实例化和访问 C++ 类。

但如果我这样做,这个 C++ 函数就不会与 C++ 项目的其余部分连接。就我而言,我使用Singletons 来访问项目的特定部分。有没有其他更好的方法可以将此 C++ 后端与项目的其余部分连接起来?

【问题讨论】:

    标签: c++ qt qml singleton


    【解决方案1】:

    您也可以将 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;
        }
    );
    

    注意,这是面向依赖注入的,您在中心位置有一个实例并将其分发给需要它的类,而不是在某个地方有一个可能导致所有问题的静态实例。如果您坚持,您仍然可以重写为静态实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多