• 9603阅读
  • 4回复

[提问]Qt怎么从ttf中加载字体?(解决) [复制链接]

上一主题 下一主题
离线呆呆很呆
 
只看楼主 倒序阅读 楼主  发表于: 2013-02-02
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
  1. QString loadFontFamilyFromTTF()
  2. {
  3.     static QString font;
  4.     static bool loaded = false;
  5.     if(!loaded)
  6.     {
  7.         loaded = true;
  8.         QFile fontFile("I:/QtObjects/edit/debug/MSYHMONO.ttf");
  9.         if(!fontFile.open(QIODevice::ReadOnly))
  10.             return QString();
  11.         int loadedFontID = QFontDatabase::addApplicationFontFromData(fontFile.readAll());
  12.         QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontID);
  13.         if(!loadedFontFamilies.empty())
  14.             font = loadedFontFamilies.at(0);
  15.         fontFile.close();
  16.     }
  17.     return font;
  18. }

这里是我的加载字体函数
  1. QString fontFamily = loadFontFamilyFromTTF();
  2.     qDebug()<<fontFamily;
  3.     QFont font(fontFamily.isEmpty()?QStringLiteral("Courier"):fontFamily,12);
  4.     setFont(font);

但是我遇到了两个问题
1.字体加载成功 qDebug()<<fontFamily输出了"Microsoft YaHei Mono" 但设置不成功 setFont没用
2.当第一次初始化的时候程序没事 第二次的时候程序直接崩溃
qDebug一共输出了


  1. "Microsoft YaHei Mono"
  2. QFontEngine::loadEngine: GetTextMetrics failed ()
  3. QWindowsFontEngine: GetTextMetrics failed ()


——————————————————————————————————————
QFont加上两个参数QFont::Normal和false 解决

离线hfqs
只看该作者 1楼 发表于: 2013-02-02
我前几天也在纠结这个问题,我的解决办法如下,希望能帮到你:

int FontId = QFontDatabase::addApplicationFont(“file path”);
QString FontFile = QFontDatabase::applicationFontFamilies(FontId ).at(0);
QFont Font = QFont(FontFile, 22);
离线呆呆很呆
只看该作者 2楼 发表于: 2013-02-02
回 1楼(hfqs) 的帖子
这样我也试过 都一样 照样不能加载
离线呆呆很呆
只看该作者 3楼 发表于: 2013-02-02
回 1楼(hfqs) 的帖子
return的FontFile是对的 但是初始化的Font却不能正常工作
离线呆呆很呆
只看该作者 4楼 发表于: 2013-02-03
最终跑到qt-project的论坛去问了,解决
http://qt-project.org/forums/viewthread/24436/
快速回复
限100 字节
 
上一个 下一个