我已经使用这些配置选项(Ubuntu 12.04)创建了Qt 5.2.0库的静态版本:
-opensource - 确认许可 -force-pkg配置 -发布 -静态的 -prefix'/ home / juzzlin / qt5' -no-ICU -opengl桌面 -no-巧舌如簧 -accessibility -nomake的例子 -nomake测试 -qt-的zlib -qt-libpng的 -qt-的libjpeg -qt-SQL源码 -qt-XCB -qt-PCRE -v
现在,问题是当我编译并将我的应用程序与这些Qt库链接时,它会尝试从Qt安装路径/home/juzzlin/qt5/lib/fonts
加载字体。这应该怎么样?该应用程序适用于我用来编译它的机器,但不适用于其他机器。我也不想将Qt东西安装到应用程序的某些系统目录中,因为应用程序不应该这样做。
这是我得到的错误:
QFontDatabase:找不到字体目录/ home / juzzlin / qt5 / lib / fonts - 是否正确安装了Qt?
如何强制它搜索其他目录中的字体?
另一件我不明白的是,为什么在使用 MXE 对Windows进行交叉编译时,我没有遇到同样的问题?它在编译Qt库时使用几乎相同的配置选项。
答案 0 :(得分:15)
您可以使用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资源系统将其嵌入到可执行文件中。