检查网址类型值的正确方法是什么?

时间:2018-01-05 08:23:59

标签: qt qml qt5 qtquick2

我是一个像这样的简单组件:

SimpleComponent.qml

Image {
 id: root

 property url selectedImage: ""
 property bool selected: false

 states: State {
   name: 'selected'
   when: selectedImage !== "" && selected

   PropertyChanges { target: root; source: selectedImage; }
 }
}

如果我尝试执行以下操作,即使条件不应为selectedImage,图像源也会被true替换。

SimpleImplementation.qml

Item {
 id: root

 SimpleComponent {
  id: simpleSwitchImage

  source: "/path/to/image.png"
  selected: true
 }
}

将以下内容附加到Component.onCompleted我已收到评论结果:

console.log(
    selectedImage,                        // empty string
    selectedImage === "",                 // false
    selectedImage === undefined,          // false
    selectedImage === null,               // false
    selectedImage === Qt.resolvedUrl(""), // false
    selectedImage.toString(),             // empty string
    selectedImage.toString() === "",      // true
    selectedImage.isEmpty,                // undefined
    selectedImage.empty                   // undefined
)

According to the documentation我唯一获得的true是资源的绝对路径,这是对{{1}类型的空属性进行如此简单检查的正确方法}?

1 个答案:

答案 0 :(得分:1)

SimpleComponent.qml示例代码中,您使用了url QML类型和零长度JavaScript字符串之间的严格不等式比较,这是错误的:

when: selectedImage !== "" && selected

您可以使用 url QML类型的toString()方法将网址内容作为字符串

when: selectedImage.toString() !== "" && selected

或使用JavaScript字符串的length属性进行检查:

when: selectedImage.toString().length>0 && selected

更具体的答案: 我认为没有更好的方法来检查网址QML类型的“空白”。