• 10484阅读
  • 8回复

[提问]QML  中文显示问题 [复制链接]

上一主题 下一主题
离线yuangong
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-26
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
我现在有这样一个需求:
从网络中读取xml,其中一些元素是中文(这些元素是动态变换的,所以不能使用tr),然后这些元素显示在控件上为乱码.
请问如何才能使这些中文在qml中正常显示?
离线dbzhang800

只看该作者 1楼 发表于: 2011-04-26
xml 包含编码信息,不存在乱码基础。

qml内部是unicode,也不存在乱码基础。

所以我只能怀疑,你对 QString与中文相关 不熟 ^_^

不过你可以多提供些信息。
离线yuangong
只看该作者 2楼 发表于: 2011-04-26
具体信息:
   XmlListModel {
        id:xmlmodel
        source: "test.xml"
        query: "/cities/city"
        namespaceDeclarations: "declare default element namespace 'http://www.w3.org/2005/Atom';"
        XmlRole { name: "cityname"; query: "cityname/string()" }
    }
    Component {
        id: buy
        Rectangle {
            radius: 10
            color:"lightblue"
            width: 360
            height: 60
            border.color: "black"
            Text {
                id: t2
                text: cityname
            }
        }
    }
其中xml 为 utf-8
xml 中cityname 为中文城市名称

[ 此帖被yuangong在2011-04-26 11:30重新编辑 ]
离线dbzhang800

只看该作者 3楼 发表于: 2011-04-26
这样的话,我是不是就可以合理地怀疑你的数据源有问题了?

按你所说,你声称是utf8,文件的真实编码和你在文件中声称的一致么?
离线yuangong
只看该作者 4楼 发表于: 2011-04-26
数据源是没有问题的.
比如下面简单的QML
  1. import QtQuick 1.0
  2. Rectangle {    
  3. width: 360    height: 360    
  4. Text {        
  5. anchors.centerIn: parent        
  6. text: "北京"    
  7. }    
  8. MouseArea {        
  9. anchors.fill: parent        
  10. onClicked: {            
  11. Qt.quit();        
  12. }  
  13. }}

其中的中文显示为乱码.
[ 此帖被yuangong在2011-04-26 15:05重新编辑 ]
离线dbzhang800

只看该作者 5楼 发表于: 2011-04-26
回 4楼(yuangong) 的帖子
汗,看来你对编码还是真的没有概念啊。本来你犯得错误,只不过是一个xml文件声明了utf8编码的文件采用了gb18030进行了保存,另存为一下存对就行了。

现在你暴露的可不是这问题了,我对qml不熟,这篇短文可能对你有帮助
http://hi.baidu.com/cyclone/blog/item/e6747f3ecdd8273271cf6c20.html
离线yuangong
只看该作者 6楼 发表于: 2011-04-26
这里和编码没有什么关系,我并没有保存XML
我在xmllistmodel 中定义了source: http://open.client.lashou.com/list/api/
然后取出其中的city标签的值(中文),显示出来就是乱码.
你提供的链接只能对固定的字符进行国际化,对于动态得到的字符是不行的.
Thanks anyway
离线dbzhang800

只看该作者 7楼 发表于: 2011-04-26
引用第6楼yuangong于2011-04-26 16:49发表的  :
这里和编码没有什么关系,我并没有保存XML
我在xmllistmodel 中定义了source: http://open.client.lashou.com/list/api/
然后取出其中的city标签的值(中文),显示出来就是乱码.
你提供的链接只能对固定的字符进行国际化,对于动态得到的字符是不行的.
Thanks anyway


一开始你给的代码显示你在用本地的xml文件。

后来你贴的代码,显示你的编码处理有问题。

不过你给的网址,不存在乱码,一段完整的测试代码如下:

  1. import Qt 4.7
  2. Rectangle {
  3.     id: page
  4.     width: 200
  5.     height: 400
  6. XmlListModel {
  7.      id: xmlModel
  8.      source: "http://open.client.lashou.com/list/api"
  9.      query: "/urlset/url/data/display"
  10.      XmlRole { name: "city"; query: "city/string()" }
  11. }
  12. ListView {
  13.      width: 180; height: 300
  14.      model: xmlModel
  15.      delegate: Text { text: city}
  16. }
  17. }

离线yuangong
只看该作者 8楼 发表于: 2011-04-26
谢谢,的确可以
快速回复
限100 字节
 
上一个 下一个