本文介绍了如何(正确)在Qt-Embedded中输出多语言文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标系统是:


  • linux 3.3.7,

  • 源版)4.8,

  • 德罗伊德字体(字体从-droid_20111207 + GIT-1_all.deb的Debian包取出并复制到 / usr / lib中/字体目录),
  • 用于主要Qt GUI应用程序的Linux Framebuffer,
  • 一切都由包。



我的测试应用程序非常简单:只有一个对话框,上面有一些静态的 QLabel (一个用于中文,一个用于阿拉伯语,一个用于西里尔文等)。

当我在Linux桌面上运行它时,所有标签都显示正确。但是当它运行在我的目标系统上时,一些文本消失了。

经过一番研究,我发现Qt框架的这种差异:
QFontDatabase 类报告我的桌面系统上只有4个Droid字体系列:

  Droid Sans [unknown] 
Droid Sans [monotype]
Droid Sans Mono
Droid Serif

但是同样的 QFontDatabase 类报告我的目标系统上有很多分隔的字体系列:

 德罗伊德阿拉伯纳斯赫
德罗伊德桑
德罗伊德桑亚美尼亚
德罗伊德桑埃塞俄比亚语
德罗伊德桑后备
德罗伊德桑格鲁吉亚
德罗伊德桑希伯来语
德罗伊德桑日本
德罗伊德桑单
德罗伊德桑泰国
Droid的衬线
-fn
命令行选项或手动调用 setFont() code>在我的应用程序中)显示一些文本标签,但其他不是(例如,当我使用Droid Sans Hebrew字体系列,韩文文本丢失,但希伯来文/阿拉伯文确定)。 b
$ b

所以,我的问题是:在Qt Embedded应用程序中输出多语言文本的正确方法是什么?为什么Droid Sans家族分离?有没有什么办法可以把它们结合在一起?



谢谢。

解决方案


$ b

Qt嵌入式渲染引擎中存在一个错误:由于某些原因,它使用QPF2字体引擎(<$ (code> QFontEngineQPF ),用于在破脚本(希伯来语/阿拉伯语/泰语/韩语)中呈现文本。

避免/解决这个问题,只需要运行与 QWS_NO_SHARE_FONTS = 1 环境变量的应用程序(和与 -fn 德罗伊德桑

之后,所有语言的所有文本都显示出来,没有任何问题。


My target system is:

  • linux 3.3.7,
  • Qt Embedded (open source edition) 4.8,
  • Droid fonts (taken from fonts-droid_20111207+git-1_all.deb Debian package and copied into /usr/lib/fonts directory),
  • Linux Framebuffer for main Qt GUI application,
  • everything is build by Buildroot package.

My test application is very simple: just one dialog box with a few static QLabel on it (one for Chinese, one for Arabic, one for Cyrillic, etc).

When I run it on my linux desktop, all labels are shown correctly. But when it runs on my target system some text disappears.

After some research, I'd found this difference in the behavior of Qt framework: QFontDatabase class reports that there is only 4 Droid font families on my desktop system:

Droid Sans [unknown]
Droid Sans [monotype]
Droid Sans Mono
Droid Serif

But the same QFontDatabase class reports that there are lots of separated font families on my target system:

Droid Arabic Naskh
Droid Sans
Droid Sans Armenian
Droid Sans Ethiopic
Droid Sans Fallback
Droid Sans Georgian
Droid Sans Hebrew
Droid Sans Japanese
Droid Sans Mono
Droid Sans Thai
Droid Serif

As the result, if I change "default" font family for my application (via -fn command line option or manually via calling setFont() inside my application) some text labels are shown but other are not (for example, when I use "Droid Sans Hebrew" font family, Korean text is missing but Hebrew/Arabic are ok).

So, my questions are: what is proper way to output multilingual text in a Qt Embedded application? Why did the "Droid Sans" family become separated? Is there any way to combine them together?

Thanks.

解决方案

Well, looks like the solution is found at last.

There is a bug in Qt Embedded Rendering Engine: for some reasons it uses "QPF2" Font Engine (QFontEngineQPF) for rendering text in "broken" scripts (Hebrew/Arabic/Thai/Korean in my case).

To avoid/fix this issue, just need to run an application with QWS_NO_SHARE_FONTS=1 environment variable (and with -fn "Droid Sans" command line parameter as well).

After that all text in all languages is displayed without any issue.

这篇关于如何(正确)在Qt-Embedded中输出多语言文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 07:22