关于qt如何显示svg矢量图片中的中文

来源:互联网 发布:长笛 知乎 编辑:程序博客网 时间:2024/04/27 15:18

  今天终于拿到svg格式的矢量图,之前使用开发板最多只能输出1024*768分辨率的图像,而显示器是1920*1080的分辨率,显示起来非常不清楚,于是想到用矢量图。

可是矢量图到手之后,简直就是噩梦的开始。

  首先是windows下用ie打开之后出现乱码,接着用svg插件搞定。然后在虚拟机上在redhat系统下用qt编码,问题出现了,无法显示图片中的文字(包括中文和英文)。当时真是第一次遇到这种情况,奇了怪了。后来经过前辈工程师的指点,原来svg图片是用xml语言描述的,于是用文本编辑器打开,查看源代码,发现其字体格式为“微软雅黑”。我的redhat下没有微软雅黑,怪不得无法显示,先不管,上板子,然后把微软雅黑的字体库拷贝到板子上,结果试了很多路径,都没有任何效果(板子是ubuntu系统,字体路径为/usr/share/fonts/truetype,可惜没有用,后来又想到也许是qt库的问题,但是找了半天找不到qt的字库存放目录,ubuntu下没有在嵌入式平台的fonts目录)。于是想到在windows下是否可行,结果证明在windows下,qt可以完美运行svg图片并且显示中文。

这下我们又陷入了沉思。。。到底是神马原因呢?于是开始到网上找为ubunu换字体的方法,试过清空字体缓存的办法,也试过在文件上直接点击“install font”,但是依然都没用。我都快斯巴达了。。。。

  下班前总结出一个结论,那就是既然无法在ubuntu上安装svg需要的字库,那么就找到ubuntu的中文字库,然后改svg代码。抱着这样的希望,俺下班回家了。

  回家之后,正好手边又ubuntu系统的电脑,于是又开始轰轰烈烈的测试。几十分钟下来,依然找不到ubuntu那个是中文字库,貌似ubuntu支持wenquanyi但是同样找不到啊啊,find指令都给我按烂了。

家里还有一台macair,结果证明air上也无法显示微软雅黑。这应该是air上没有字库的原因。但是奇怪的是ubuntu的图片查看器却可以显示微软雅黑。所以应该是ubuntu有字库,但是qt没有,并且也找不到这个字库。。。。这实在是太复杂了。。。。网上有人说无法显示中文和中文乱码是两回事,前者是程序问题,后者才是xml原文件问题,所以认为是qt的控件没有设置字体样式的缘故,所以在QSvgwidget用setstylesheet设置了font-family为微软雅黑,仿宋,文泉驿。。等等,都没用。看来qt根本就不自带这些字体,并且我也不知道怎么安装这些字体!!再次斯巴达!!

后来我转念一想,既然svg格式是xml语言描述的,是否可以找一找qt如何解析xml文件中的中文的办法呢?

果然被我找到好多例子,大多数人都建议修改编码格式为utf-8,我一查看,已经是utf8了,改成GB2312之后图片全部都不显示了。于是改回来,应该不是编码格式的问题。

继续找,继续找。。。终于,重点来了,我看见一个qt解析xml文件的例子,里面xml文件只有编码格式,却没有指明自体格式(family-font)我心想这难道就是。。。终极答案?????既然例子中不指明字体格式都能显示中文,说明最重要的就是utf8编码格式啊!!字体格式如果不指明,qt应该会自己找一个默认的吧》????我抱着这样的猜想,将文件中所有family-font全部替换为空。保存,再次运行程序,完美显示中文!!!