为什么 Qt Quick 2 中变量定义改为 var 呢?而不继续使用 variant 呢?我们看看它们的区别吧。
QtQuick 1.x
-
property variant
内部是 QVariant。 - 对象被分配给 variant 变量时则会被转换为 QVariantMap。
- 从 javascript 访问该属性将导致 QVariantMap 转换回 JS 对象。
- javascript 的函数,特殊的 JS 值 (null,undefined) 无法存储在 ”property variant” 类型的属性中。
QtQuick 2.x
-
property var
内部是 javascript 值。 -
property var
支持创建 javascript 的所有内容,包括函数引用。 - 仅当 从 C ++(通过 QObject::property()或 QQmlProperty::read())访问时,才会转换为 QVariant(将其他 JS 值转换为 QVariant 的转换规则相同)。
- 在 C ++ 端实现类型时,可以将 QJSValue 类用作属性 / 方法参数,以在 C ++ 和 QML/JS 之间传输值,而不会造成类型 / 数据丢失。
总结
使用 property var
作用更大,避免不必要的转换,性能更好。
ref: https://wiki.qt.io/Property-var