检查 url 类型值的正确方法是什么?
What is the correct way to check url type value?
我有一个像这样的简单组件:
SimpleComponent.qml
Image {
id: root
property url selectedImage: ""
property bool selected: false
states: State {
name: 'selected'
when: selectedImage !== "" && selected
PropertyChanges { target: root; source: selectedImage; }
}
}
如果我尝试执行如下操作,即使条件不应该是 true
.
,图像源也会被替换为 selectedImage
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
是资源的绝对路径,这是对空 属性 类型进行这种简单检查的正确方法吗url
?
在 SimpleComponent.qml
示例代码中,您在 url QML 类型和零长度 JavaScript 字符串之间使用严格的不等式比较,这是错误的:
when: selectedImage !== "" && selected
您可以使用 url QML 类型的 toString()
方法将 url 内容作为字符串
when: selectedImage.toString() !== "" && selected
或使用 JavaScript 字符串的 length
属性 进行检查:
when: selectedImage.toString().length>0 && selected
更具体的答案:
我认为没有更好的方法来检查 url QML 类型的 "emptyness"。
我有一个像这样的简单组件:
SimpleComponent.qml
Image {
id: root
property url selectedImage: ""
property bool selected: false
states: State {
name: 'selected'
when: selectedImage !== "" && selected
PropertyChanges { target: root; source: selectedImage; }
}
}
如果我尝试执行如下操作,即使条件不应该是 true
.
selectedImage
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
是资源的绝对路径,这是对空 属性 类型进行这种简单检查的正确方法吗url
?
在 SimpleComponent.qml
示例代码中,您在 url QML 类型和零长度 JavaScript 字符串之间使用严格的不等式比较,这是错误的:
when: selectedImage !== "" && selected
您可以使用 url QML 类型的 toString()
方法将 url 内容作为字符串
when: selectedImage.toString() !== "" && selected
或使用 JavaScript 字符串的 length
属性 进行检查:
when: selectedImage.toString().length>0 && selected
更具体的答案: 我认为没有更好的方法来检查 url QML 类型的 "emptyness"。