Linux上的静态Qt5构建:部署时如何处理字体

Static Qt5 build on Linux: how to handle fonts when deploying?

本文关键字:何处理 处理 字体 部署 静态 Qt5 构建 Linux      更新时间:2023-10-16

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

-开源-确认许可证-强制pkg配置-释放-静态的-前缀'/home/juzzlin/qt5'-没有重症监护室-opengl桌面-不要油嘴滑舌-可达性-典型的例子-nomake测试-qt-zlib-qt-libpng-qt-libjpeg-qt-sql-sqlite-qt-xcb-qt-pcre-v

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

这是我得到的错误:

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

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

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

您可以使用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