[英]QML: reflective access to type of property
在QML中,如何通過反射查詢項的屬性類型?
即我有一個Item C
,它的屬性x
為real
類型,屬性y
為string
; 在其他某個呼叫站點,我有C
的實例,並想查詢其屬性x
的類型。 使用普通Qt,我可以使用QMetaObject
,但是如何使用QML呢?
與JavaScript中一樣,您可以使用typeof
:
QtObject {
id: c
property real x
property string y
property int z
Component.onCompleted: print(typeof c.x, typeof c.y, typeof c.z)
}
這將打印qml: number string number
。
請注意,即使x
和z
的類型不同,這里也沒有區別,這是因為JavaScript只能識別1個數字類型,每個數字都是64位浮點數*。
如果您想知道Qt引擎實際上是如何存儲類型的,則必須按照問題中的說明進行操作,請使用QMetaObject。 為此,您可以將c ++類型公開為qml單例 ,並在其中公開一個可調用的方法,以返回對象屬性的類型名:
#ifndef METAOBJECTHELPER_H
#define METAOBJECTHELPER_H
#include <QMetaObject>
#include <QObject>
#include <QQmlProperty>
class MetaObjectHelper : public QObject {
Q_OBJECT
public:
using QObject::QObject;
Q_INVOKABLE QString typeName(QObject* object, const QString& property) const
{
QQmlProperty qmlProperty(object, property);
QMetaProperty metaProperty = qmlProperty.property();
return metaProperty.typeName();
}
};
#endif // METAOBJECTHELPER_H
在QML中執行此操作:
print(MetaObjectHelper.typeName(c, "x"), MetaObjectHelper.typeName(c, "y"), MetaObjectHelper.typeName(c, "z"));
然后將打印qml: double QString int
*:更多細節在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.