我正在寻找一个简单的逐步解决方案,在JUCE中嵌入字体。
我在应用程序中嵌入字体时遇到了一些麻烦(在应用程序发布之前完全忘了把时间花在这上面,现在我的应用程序不是在用户系统上显示我的字体 - 这是可以理解的)
我已经搜索并关注了有关该主题的所有帖子,但我仍然遇到问题。我希望将嵌入字体添加到我们应用中已经存在的标签中,这些标签是我们通过ProJucer GUI组件创建和布局的。
到目前为止我做了什么:
1)将字体添加到我的ProJucer会话中,以便将其添加到BinaryData
2)创建了一个名为" EmbeddedFont:"
的课程#include "../JuceLibraryCode/JuceHeader.h"
class EmbeddedFonts
{
private:
Font calistoMT;
public:
EmbeddedFonts();
Font& getCalistoMT();
};
和
EmbeddedFonts::EmbeddedFonts()
{
// in the line below is where I'm getting the assertion error: jassert (typefaceName.isNotEmpty());
calistoMT = Font(Typeface::createSystemTypefaceFor(BinaryData::Calisto_MT,
BinaryData::Calisto_MTSize));
}
Font& EmbeddedFonts::getCalistoMT()
{
return calistoMT;
}
3)在我的GUI组件类的标题中创建了一个这样的实例 4)尝试将此字体传递给标签字体:
genericLabelName->setFont(embeddedFont.getCalistoMT());
不确定从这里做什么。此外,在我使嵌入字体工作后,我应该对projucer GUI组件中的字体字段做些什么?我应该把它设置为相同的字体吗?我只是问,因为我在技术上会在构造函数中设置两次字体(一次来自GUI Component选项下拉菜单,一次来自手工编码嵌入字体)。
我已经尝试了几天但仍然遇到麻烦。谢谢你的帮助。这是我在发布下一个应用更新之前需要做的最后一件事,所以非常感谢任何帮助。
答案 0 :(得分:1)
由于看起来你在JUCE方面正确地做事,我相信你试图加载的字体文件没有与之关联的名称。我会尝试以下方法:
检查从Typeface
调用返回的createSystemTypefaceFor
的名称,然后再将其传递给Font
构造函数。我相信应该有一个getName()
或类似的电话来获取它的名字。如果那个名字是空的(我希望它是,鉴于你的断言),那就是你的问题。
您可能想尝试下载一个TTF文件查看器,它可以为您提供有关您尝试加载的文件的一些信息。它还可以指示您正在阅读的字体是否具有名称是不是。如果它的元数据中似乎有一个名称,则可能表示JUCE库中存在错误。
您可以尝试加载不同的字体或您知道在元数据中具有正确名称的不同字体(因为您已经使用某种查看器或工具进行了检查),并查看是否为它们创建了字体已设置名称,如果是,请尝试从其中一个字体创建Font
,看看它是否成功。
如果加载的字体实际上确实有一个名称设置,那么这个理论就会出现在窗口之外,但是我仍然会尝试第三步,看看你是否总是得到每种字体的这个错误,或者它是否仅限于唯一的那个。