Qml之variant與var對比

  • 2019 年 11 月 24 日
  • 筆記

為什麼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作用更大,避免不必要的轉換,性能更好。