用c++从QML单例中读取属性

Read property from QML singleton with C++

本文关键字:读取 属性 单例中 QML c++      更新时间:2023-10-16

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

例如,如果我的QML单例是这样的:

pragma Singleton
import QtQuick 2.5
QtObject {
  property int myProperty: 5
}

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

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

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

Constants.qml

pragma Singleton
import QtQuick 2.5
QtObject {
    objectName: "Constants"
    property double phi: 1.6180339887498948482
}

主要。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