qml 和 cpp 之間傳遞數(shù)值時候的類型轉(zhuǎn)換其實就是:
javascript 和 c++ 之間的大致的類型轉(zhuǎn)換,js類型是qml的類型子集,c++類型是qt的類型子集
①基礎(chǔ):
Qt Type
QML Basic Type
bool
bool
unsigned int, int
int
double
double
float, qreal
real
QString
string
QUrl
url
QColor
color
QFont
font
QDateTime
date
QPoint, QPointF
point
QSize, QSizeF
size
QRect, QRectF
rect
QMatrix4x4
matrix4x4
QQuaternion
quaternion
QVector2D, QVector3D, QVector4D
vector2d, vector3d, vector4d
Enums declared with Q_ENUM() or Q_ENUMS()
enumeration
②直接或間接以QObject為基類的類型。
只要將改類型注冊到qml的類型系統(tǒng)。
③Qt(C++)類型和javascrpt類型之間的轉(zhuǎn)換。
④QVariantList 和QVariantMap 到JavaScript的Array 和Object之間的類型轉(zhuǎn)換。
⑤QDateTime和javascript 中的Date之間的轉(zhuǎn)換。
⑥序列類型到JavaScript中Array類型的轉(zhuǎn)換。
目前支持以下類型:
QList
QList
QList
QList and QStringList
QList
有兩種使用方式:
1)以Q_PROPERTY聲明的屬性。
以Q_INVOKABLE聲明的函數(shù)的返回值。
注意:這兩種方式有如下差異:
1)作為Q_PROPERTY聲明的屬性的方式,通過下標修改或訪問任何一個元素都會通過屬性系統(tǒng)進行讀寫操作。
2)作為Q_INVOKABLE函數(shù)返回值的方式,在訪問和修改時對系統(tǒng)的性能影響很小。
⑦以Q_GADGET聲明的自定義c++類型,需要在JavaScript中訪問的屬性都用Q_PROPERTY聲明,需要在JavaScript中訪問的函數(shù)都要用Q_INVOKABLE聲明。這和繼承自QObject的類型的用法相同。
⑧想要使用一個在c++中定義的枚舉類型,包含該枚舉的類必須要注冊并且,該枚舉應該使用Q_ENUMS來聲明。注意: 枚舉類型的值的首字母必須大寫,才能在mql中被訪問。
更多最新的你應該在qt中搜索的關(guān)鍵詞是:
Data Type Conversion Between QML and C++
//
qml對象的屬性定義 ({}) 代表QtObject空對象
property QtObject myChart:({})
從qml js引擎到 c++ 類型不明確對應的一般只轉(zhuǎn)換成 QVariant
//QVariant 也直接支持接收一個qml的js數(shù)組[] 沒必要用QVariantList
QVector cppdatalist = indata.value>();