乐趣区

Qml之variant与var对比

为什么 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

退出移动版