使用 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
是否可以在您的 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