qml 和 cpp 之间传递数值时候的类型转换

技术分享 2022-03-25 10:13:54

qml 和 cpp 之间传递数值时候的类型转换其实就是:

javascript 和 c++ 之间的大致的类型转换,js类型是qml的类型子集,c++类型是qt的类型子集


①基础:


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的类型系统。


③Qt(C++)类型和javascrpt类型之间的转换。


④QVariantList 和QVariantMap 到JavaScript的Array 和Object之间的类型转换。


⑤QDateTime和javascript 中的Date之间的转换。


⑥序列类型到JavaScript中Array类型的转换。

目前支持以下类型:

QList

QList

QList

QList and QStringList

QList

有两种使用方式:

1)以Q_PROPERTY声明的属性。


以Q_INVOKABLE声明的函数的返回值。

注意:这两种方式有如下差异:

1)作为Q_PROPERTY声明的属性的方式,通过下标修改或访问任何一个元素都会通过属性系统进行读写操作。

2)作为Q_INVOKABLE函数返回值的方式,在访问和修改时对系统的性能影响很小。


⑦以Q_GADGET声明的自定义c++类型,需要在JavaScript中访问的属性都用Q_PROPERTY声明,需要在JavaScript中访问的函数都要用Q_INVOKABLE声明。这和继承自QObject的类型的用法相同。


⑧想要使用一个在c++中定义的枚举类型,包含该枚举的类必须要注册并且,该枚举应该使用Q_ENUMS来声明。注意: 枚举类型的值的首字母必须大写,才能在mql中被访问。


更多最新的你应该在qt中搜索的关键词是:

Data Type Conversion Between QML and C++ 



//

qml对象的属性定义  ({})  代表QtObject空对象

property QtObject myChart:({})


从qml js引擎到 c++  类型不明确对应的一般只转换成 QVariant

//QVariant 也直接支持接收一个qml的js数组[]   没必要用QVariantList<br/>QVector<double>  cppdatalist = indata.value<QVector<double>>();  
咨询小瓶科技
咨询我们
顶部