QML 图像不会在图像源中加载具有非 ASCII 字符的图像
Posted
技术标签:
【中文标题】QML 图像不会在图像源中加载具有非 ASCII 字符的图像【英文标题】:QML image does not load image with non ASCII character in image source 【发布时间】:2018-04-16 09:51:17 【问题描述】:我必须在基于 Linux 的设备上显示来自 USB 设备的图像。 我的 USB 有一个包含非 ASCII 字符的文件夹。 替换为“?”字符。
原始路径:"file:///tmp/USB6/§§§§/Koala.jpg"
和
QML 返回错误:"QML Image: Cannot open: file:///tmp/USB6/????/Koala.jpg"
我的图片将如何使用此路径加载?
Image
id: mainImage
source: iconRole
asynchronous: true
sourceSize.width: screenSize_Width
sourceSize.height: screenSize_Height
fillMode: Image.PreserveAspectCrop
onSourceChanged:
console.log("SOURCE = ",source)
-
我得到的日志:
SOURCE = file:///tmp/USB6/§§§§/Koala.jpg
我获取 QML 图像时出错:Cannot open: file:///tmp/USB6/????/Koala.jpg
。
【问题讨论】:
我知道你怀疑这个角色,这可能是原因,但是你也提到了 USB,你有权限打开那里的文件吗? 是的,所有权限都在那里。包含 ASCII 字符的文件路径可以正确打开。 我明白了,你能分享你打开文件的那部分代码吗? 如果您将图像绑定为资源(在 qrc 中),您会得到什么。 确保使用正确的文件名编码挂载 usb 文件系统,qml 源是 UTF-8 编码的,并且系统区域设置与之匹配。在开始使用 QML 之前,您应该有时间使用QFile
正确打开。
【参考方案1】:
关于 URL 的 Qt 文档:
此外,URL 可能包含使用 RFC 3986 指定的“百分比编码”方案。这些字符将 保存在 url 类型的属性中,以允许 QML 代码 构造精确的 URL 值。该规则的一个例外是 目录分隔符('/')的抢先式解码 - 这些 字符被解码以允许正确分类 URL。
例如,包含“#”字符的本地文件,它会 通常被解释为 URL 'fragment' 的开头 元素,可以通过对文件名的字符进行编码来访问:
Image source: encodeURIComponent("/tmp/test#1.png")
这种基本类型是由 QML 语言提供的。
【讨论】:
是否需要为系统设置任何区域设置? @AnupamSrivastava 是的,我猜你不能,因为它只提到了 ascii 符号,我认为 Qt/QML 不支持你想做的事情。我知道您可以使用 Python 使用宽字符来做到这一点,但我认为这在 Qt 中是不可能的。【参考方案2】:它适用于这种情况。
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
把这条语句放在main.cpp中
【讨论】:
以上是关于QML 图像不会在图像源中加载具有非 ASCII 字符的图像的主要内容,如果未能解决你的问题,请参考以下文章