qt - 如何(正确)在 Qt-Embedded 中输出多语言文本?

标签 qt fonts multilingual qtembedded

我的目标系统是:

  • Linux 3.3.7,
  • Qt Embedded(开源版)4.8,
  • Droid 字体(取自 fonts-droid_20111207+git-1_all.deb Debian 包并复制到 /usr/lib/fonts 目录),
  • 主要 Qt GUI 应用程序的 Linux 帧缓冲区,
  • 所有内容均由 Buildroot 构建包。

我的测试应用程序非常简单:只有一个对话框,上面有一些静态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 Hebrew”字体系列时,韩文文本丢失,但希伯来文/阿拉伯文都可以)。

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

谢谢。

最佳答案

我创建了一个小型测试应用程序,它从文件中加载字体,然后在 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();
}

关于qt - 如何(正确)在 Qt-Embedded 中输出多语言文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125081/

相关文章:

html - 正文字体有时会消失

android - 如何遍历字符串并为某些关键字分配不同的颜色以在 Android 中显示文本?

php - 无法使用多语言 codeigniter 摆脱 URL 中的默认 Controller

windows - GetUserPreferredUILanguages() 永远不会返回超过两种语言

c++ - 如何让 CImg 库为 Qt 工作

windows - 主要操作系统中Qt集成与通讯录交互

css - @font-face 质量问题

internationalization - 印尼语/印度尼西亚语和他加禄语/菲律宾语的语言环境是什么?是 id_ID 和 tl_PH 吗?

c++ - 在 C++ 中使用线程创建 QT gui?

javascript - 为什么比较结果不一样?