QML图像不会在图像源中加载非ASCII字符的图像

时间:2018-04-16 09:51:17

标签: c++ linux qt url qml

我必须在基于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)
  }
}
  1. 我收到的日志:SOURCE = file:///tmp/USB6/§§§§/Koala.jpg
  2. 错误我收到QML图片:Cannot open: file:///tmp/USB6/????/Koala.jpg

2 个答案:

答案 0 :(得分:1)

Qt关于URL的文档:

  

此外,URL可能包含使用的编码字符   由RFC 3986指定的'percent-encoding'方案。这些人物会   保留在url类型的属性中,以允许QML代码   构造精确的URL值。这条规则的一个例外是   抢先解码目录分隔符('/') - 这些   解码字符以允许URL被正确分类。

     

例如,包含'#'字符的本地文件   通常被解释为URL'片段'的开头   元素,可以通过编码文件名的字符来访问:

Image { source: encodeURIComponent("/tmp/test#1.png") }
     

这种基本类型由QML语言提供。

答案 1 :(得分:0)

它适用于这种情况。

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

将此声明放在main.cpp