使用 C++ 从 QML 单例中读取 属性

Read property from QML singleton with C++

是否可以在您的 C++ 代码中 access/read QML 单例的属性?

例如,如果我的 QML 单例如下所示:

pragma Singleton
import QtQuick 2.5

QtObject {
  property int myProperty: 5
}

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

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

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

Constants.qml

pragma Singleton

import QtQuick 2.5

QtObject {
    objectName: "Constants"
    property double phi: 1.6180339887498948482
}

main.qml(例如)

import QtQuick 2.5
import "."

function getPhi()
{
    return Constants.phi;
}

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();

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

qmldir

singleton Constants Constants.qml