我的目标系统是:
- linux 3.3.7,
- Qt Embedded(开源版)4.8,
- Droid 字体(取自 fonts-droid_20111207+git-1_all.deb Debian 软件包并复制到
/usr/lib/fonts
目录),
- 主要 Qt GUI 应用程序的 Linux 帧缓冲区,
- 一切都是由构建根 http://buildroot.uclibc.org/包裹。
我的测试应用程序非常简单:只有一个带有一些静态的对话框QLabel
(一个用于中文,一个用于阿拉伯文,一个用于西里尔文,等等)。
当我在 Linux 桌面上运行它时,所有标签都正确显示。但是当它在我的目标系统上运行时,一些文本会消失。
经过一些研究,我发现 Qt 框架的行为存在差异:QFontDatabase
类报告我的桌面系统上只有 4 个 Droid 字体系列:
Droid Sans [unknown]
Droid Sans [monotype]
Droid Sans Mono
Droid Serif
但同样QFontDatabase
班级报告说有很多分开我的目标系统上的字体系列:
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
结果,如果我更改应用程序的“默认”字体系列(通过-fn
命令行选项或通过调用手动setFont()
在我的应用程序中)显示了一些文本标签,但其他文本标签没有显示(例如,当我使用“Droid Sans希伯来语”字体系列时,韩语文本丢失,但希伯来语/阿拉伯语可以)。
所以,我的问题是:在 Qt 嵌入式应用程序中输出多语言文本的正确方法是什么? “Droid Sans”家族为何分崩离析?有什么办法可以将它们结合在一起吗?
Thanks.
我创建了一个小型测试应用程序,它从文件加载字体,然后在 GUI 中使用它。
#include <QtGui>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
/* Load font data from file in the same directory as executable */
QFile fontFile("BaroqueScript.ttf");
if (!fontFile.open(QIODevice::ReadOnly)) {
qCritical() << "failed to open font file";
}
QByteArray fontData = fontFile.readAll();
/* Register font to the QFontDatabase */
if (QFontDatabase::addApplicationFontFromData(fontData) == -1) {
qCritical() << "failed to add a font";
}
/* Create font object and verify font family */
QFont font("Baroque Script", 10, QFont::Bold);
QFontInfo fontInfo(font);
qDebug() << "Expected:" << font.family() << "Real:" << fontInfo.family();
/* Produce GUI which uses loaded font */
QLabel label("Hello, world");
label.setFont(font);
label.show();
return app.exec();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)