检查 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() 这样的isEmptyempty 属性吗?遗憾的是,QML 文档在涉及基本 QML 类型时并不那么慷慨。 @xander 你的意思是typeof selectedImage === "undefined"?在这种情况下我没有尝试过。我也不知道像isEmpty 这样的东西,因为我找不到关于它的信息(还)。 不,我的意思是作为 url 的 bool 属性,例如 selectedImage.isEmptyselectedImage.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 类型值的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

检查输入字段中的空值的正确方法是啥[重复]

检查联合实例之间是不是相等的正确方法是啥?

检查 False 的正确方法是啥? [复制]

在 Java 中检查空值的最佳方法是啥?

如果不为空,检查查询字符串参数值的最优雅方法是啥?

在 React 中键入检查事件 onKeyPress 的正确方法是啥?