在QML和C ++之间交换数据值时,它们将由QML引擎转换为具有适用于QML或C ++的正确数据类型。 这要求交换的数据具有引擎可识别的类型。
QML引擎为大量QT C++数据类型提供内置支持。此外,自定义C++类型可以注册到QML类型系统中,使它们可以用于引擎。
该页面讨论了QML引擎支持的数据类型以及如何在QML和C ++之间转换它们。
数据所有权
当数据从C ++传输到QML时,数据所有权始终由C ++保留。 该规则的例外情况是从显式C ++方法调用返回QObject时:在这种情况下,除非通过调用QQmlEngine将对象的所有权显式设置为与C ++一起使用,否则QML引擎假定该对象的所有权: 使用QQmlEngine :: CppOwnership指定的setObjectOwnership()
此外,QML引擎尊重Qt C ++对象的常规QObject父所有权语义,并且永远不会删除具有父对象的QObject实例。
基本Qt数据类型
默认情况下,QML识别以下Qt数据类型,当从C ++传递到QML时,它们会自动转换为相应的QML基本类型,反之亦然:
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 |