使用C++从QML singleton读取属性

Tob*_*ch. 6 c++ singleton qt properties qml

是否可以在C++代码中访问/读取QML单例的属性?

例如,如果我的QML单例看起来像这样:

pragma Singleton
import QtQuick 2.5

QtObject {
  property int myProperty: 5
}
Run Code Online (Sandbox Code Playgroud)

如何从C++代码访问myProperty.我需要这个,因为我不想在QML和C++中都有我的"神奇"数字,而且它在C++中很少需要.

对于普通的QQuickItem来说,它总是很容易.只需访问QuickItem(通过动态创建它或使用findChild())然后调用quickItem->property("myProperty").toInt() 但是使用单例我无法看到如何访问它.

Ben*_*p44 1

虽然不是直接访问 QML 单例,但访问 QML 单例的一种方法是通过非单例 QML 对象中的函数,您可以按通常的方式访问:

常量.qml

pragma Singleton

import QtQuick 2.5

QtObject {
    objectName: "Constants"
    property double phi: 1.6180339887498948482
}
Run Code Online (Sandbox Code Playgroud)

main.qml(例如)

import QtQuick 2.5
import "."

function getPhi()
{
    return Constants.phi;
}
Run Code Online (Sandbox Code Playgroud)

C++

//...
// Create the engine and load QML
//...

QObject* rootObject = engine->rootObjects().constFirst();

QVariant phi;
QMetaObject::invokeMethod(rootObject, "getPhi", Q_RETURN_ARG(QVariant, phi));
qDebug() << phi.toFloat();
Run Code Online (Sandbox Code Playgroud)

不要忘记您需要一个qmldir文件来访问 QML 中的单例:

目录

singleton Constants Constants.qml
Run Code Online (Sandbox Code Playgroud)