【发布时间】:2016-03-12 01:39:08
【问题描述】:
我有一个使用 Qt 的共享库版本 (5.2.0) 编写的程序,它显示的字体正常(大概是从 /usr/share/fonts 填充它的数据库)。 (不确定 Designer 文本是否来自与编程字体处理相同的数据库。)但后来我在开源静态版本(5.2.0)下重新编译它,字体变得丑陋。
我破坏了安装 Qt 的路径(因为静态版本的整个想法是独立于开发目录),果然它抱怨无法访问任何字体。所以我得出结论 Qt 改变了他们的静态版本,不再输入 /usr/share/fonts。互联网上的一些研究告诉我,他们改为查看...somedir/lib/fonts。
通过更多研究,我发现我可以使用 env var QT_QPA_FONTDIR 来设置搜索目录(尽管我怀疑它可能已简化为一级搜索,而不是递归)。不想编写脚本来包装程序并在调用它之前设置环境变量,我继续在程序中使用 putenv()。我选择了一个我认为会在 Qt 读取环境之前设置变量的地方,并且由于在 main() 之前调用了全局构造函数,并且肯定在实例化 QApplication 之前调用了它,所以我将它放在构造函数中。
但是,你猜怎么着,他们似乎在我的构造函数设置 QT_QPA_FONTDIR=/usr/share/fonts 之前读取了环境。
所以请帮忙!!!!如何让我的构造函数首先执行?
【问题讨论】:
-
Ryan,我希望将所有系统(Fedora 19)字体加载到 QFontDatabase 中。您提供的链接显示了如何将一种特定字体(在编译时已知的字体名称)嵌入到可执行文件中。所以这不是一个真正的解决方案。比如说,程序的目标是显示系统上所有可用的字体、字体名称和字体样式以及它们的外观。您必须获得所有字体,而不是特定字体。当程序在不同的机器上运行时,所有的字体,不一样的设置。不过感谢您的意见。
标签: c++ qt fonts constructor startup