检查 url 类型值的正确方法是啥?
Posted
技术标签:
【中文标题】检查 url 类型值的正确方法是啥?【英文标题】:What is the correct way to check url type value?检查 url 类型值的正确方法是什么? 【发布时间】:2018-01-05 08:23:58 【问题描述】:我有一个像这样的简单组件:
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
类型的空属性进行如此简单检查的正确方法吗?
【问题讨论】:
我现在无法测试它,但没有像QUrl::isEmpty() 这样的isEmpty
或empty
属性吗?遗憾的是,QML 文档在涉及基本 QML 类型时并不那么慷慨。
@xander 你的意思是typeof selectedImage === "undefined"
?在这种情况下我没有尝试过。我也不知道像isEmpty
这样的东西,因为我找不到关于它的信息(还)。
不,我的意思是作为 url 的 bool 属性,例如 selectedImage.isEmpty
或 selectedImage.empty
,您可以尝试记录吗?请参阅我上面链接的 QUrl 的 Qt 文档,但如前所述,没有关于 QML url 的文档,至少没有关于属性/函数的任何方式。由于您的 selectedImage
是 url 类型,而不是简单的字符串。
遗憾的是他们都返回undefined
,我已经用这个新信息更新了问题。
【参考方案1】:
在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 类型的“空性”。
【讨论】:
这比严格检查""
更好吗?
我更仔细地阅读了您的问题,并注意到您实际上问得更具体。我认为提供已经有问题的示例代码然后想知道为什么它不起作用“如果我尝试做某事......”无论如何,我编辑了我的答案并更新了更具体的答案,这不是一个好主意。
那么这是唯一的方法吗?
我会这么说。 url QML 基本类型不提供任何用于此类检查的功能,因此将其转换为字符串似乎是目前唯一的选择。在打开的错误“从 url QML 类型返回本地文件路径”(bugreports.qt.io/browse/QTBUG-54988)的注释字段中,您可以看到提供与 QUrl 类似的 API 的“Url”类型的建议,而“url”值类型保持不变。 QUrl::isEmpty() 将是 C++ 端的函数。但是,该错误的状态尚未解决。以上是关于检查 url 类型值的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章