【问题标题】:Static Qt5 build on Linux: how to handle fonts when deploying?静态 Qt5 在 Linux 上构建:部署时如何处理字体?
【发布时间】:2014-01-12 03:33:08
【问题描述】:

我已经使用这些配置选项(Ubuntu 12.04)创建了 Qt 5.2.0 库的静态版本:

-开源 -确认许可证 -force-pkg-config -发布 -静止的 -前缀'/home/juzzlin/qt5' -没有ICU -opengl 桌面 - 不花言巧语 - 可访问性 -nomake 示例 -nomake 测试 -qt-zlib -qt-libpng -qt-libjpeg -qt-sql-sqlite -qt-xcb -qt-pcre -v

现在,问题是当我编译并链接我的应用程序与这些 Qt 库时,它会尝试从 Qt 安装路径 /home/juzzlin/qt5/lib/fonts 加载字体。这应该如何工作?该应用程序可以在我用来编译它的机器上运行,但不能在其他机器上运行。我也不想将 Qt 的东西安装到应用程序的某些系统目录中,因为应用程序不应该这样做。

这是我得到的错误:

QFontDatabase: 找不到字体目录 /home/juzzlin/qt5/lib/fonts - Qt 安装正确吗?

如何强制它在其他目录中搜索字体?

我不明白的另一件事是,为什么我在使用 MXE 为 Windows 进行交叉编译时没有同样的问题?它在编译 Qt 库时使用几乎相同的配置选项。

【问题讨论】:

    标签: c++ linux qt fonts


    【解决方案1】:

    您可以使用 Qt 资源系统将字体文件嵌入到您的可执行文件中。

    http://qt-project.org/doc/qt-5/resources.html

    然后在您的应用程序中,您可以加载嵌入的字体。

    QGuiApplication app(argc, argv);
    QQuickView view;
    
    // Load the embedded font.
    QString fontPath = ":/fonts/MyFont.ttf";
    int fontId = QFontDatabase::addApplicationFont(fontPath);
    if (fontId != -1)
    {
        QFont font("MyFont");
        app.setFont(font);
    }
    

    我怀疑您的应用程序正在您的主目录中搜索字体,因为 qmake 在编译时硬编码了不同资源的路径。要查看这些路径的值,请运行:

    qmake -query
    

    您可以通过包含一个 qt.conf 文件来覆盖应用程序中的这些路径,您也可以使用 qt 资源系统将其嵌入到可执行文件中。

    http://qt-project.org/doc/qt-5.0/qtdoc/qt-conf.html

    【讨论】:

    • 我不知道 qt.conf,谢谢! :) 这解决了我的问题。
    • 但是,我仍然不明白,如果我使用预编译的 Qt 库并动态链接或使用静态库为 Windows 进行交叉编译,为什么我不必担心这一点。为什么这些库不在某些硬编码位置搜索字体目录?它一直都在起作用。我在这里错过了什么?
    • 我不是 100% 确定为什么,但我可以推测...工作。也许有一个配置选项可以告诉 Qt 5 在使用 xcb 平台插件时使用 fontconfig。
    • 看来安装libfontconfig1-dev并用-fontconfig编译Qt可以解决问题。
    • 感谢qmake -query
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多