打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
嵌入式Qt支持ttf字库,并显示中文
userphoto

2020.07.17

关注

引言

        最近在做QT项目发现中文没法显示,于是百度QT嵌入式显示中文,基本上提示的都是把ttf字库转换为QPF(QT专门支持二进制的),发现这个qpf本身制作就很麻烦,按照网上的做法实实在在来了一边,发现编译一个qvfb都好麻烦了,还有makeqpf程序。qvfb属于x86用于给QT提供程序提供fb环境的。makeqpf不能直接在系统上面跑,必须依赖于系统fb才能运行。发现编译qvfb有两个问题:一个libpng需要安装,一个是配置成X86的。makeqpf和qvfb是两种不应的格式,及:
makeqpf是带-embedded x86选项的配置
qvfb是正常没有-embedded选项的配置

编译好后发现使用makeqpf的file加载fft有问题,没法加载。后面就不弄了。而且弄个出来的qpf文件只是固定大小的,不能缩放。不同字体大小还得定制多个qpf字库。后面想着qt应该可以加载ttf,搜索网络发现没有相关的介绍,于是就自己摸索了。于是有点心得,便记录一下过程。

freetype简介

        freetype是完全免费,不用担心版权的问题,freetype支持ttf字库的加载,以及文字的提取。支持多种字体格式。为什想到freetype呢?原因是查看qt的配置选项里面有个-qt-freetype,加上之前自己利用freetype成功提取了中文字的点阵。于是就想到qt应该也支持的。于是就把该选项编译进去。

QT配置支持ttf字库选项:

./configure -qt-freetype ...

配置好后,make,make install 就可以生成QT库,

事例代码:

修改一个demo尝试使用的是macmainwindow,这个简单,makefile要去掉苹果库的链接。
代码如下:
  1. #include <QtGui>
  2. #include "macmainwindow.h"
  3. #include <QDebug>
  4. #include <QFontDatabase>
  5. #include <QTextCodec>
  6. #include <QPainter>
  7. #include <QWSServer>
  8. #if 0
  9. int main(int argc, char **argv)
  10. {
  11. QApplication app(argc, argv);
  12. MacMainWindow mainWindow;
  13. mainWindow.show();
  14. return app.exec();
  15. }
  16. #else
  17. int main(int argc, char **argv)
  18. {
  19. QWSServer::setBackground(QColor(0,0,0,0));
  20. QWSServer::setCursorVisible(false);
  21. QFontDatabase database;
  22. foreach (const QString &family, database.families(QFontDatabase::SimplifiedChinese))
  23. {
  24. qDebug()<<family;
  25. }
  26. QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
  27. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
  28. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
  29. QPalette pa;
  30. pa.setColor(QPalette::WindowText,Qt::red);
  31. QApplication app(argc, argv);
  32. QString chinese;
  33. QLabel label ,label1;
  34. QFont font("Source Han Sans CN",20,QFont::Bold);
  35. label.setGeometry(200,80,900,200);
  36. label.setFont(font);
  37. chinese = QString::fromUtf8("思源字体\r\nQT中文字体显示不同大小任意设置:20号加粗字体");
  38. label.setText(chinese);
  39. label.setPalette(pa);
  40. label.show();
  41. QFont font1("Source Han Sans CN",30,QFont::Normal);
  42. label1.setGeometry(200,280,900,200);
  43. label1.setFont(font1);
  44. chinese = QString::fromUtf8("思源字体\r\nQT中文字体显示不同大小任意设置:30号正常字体");
  45. label1.setText(chinese);
  46. label1.setPalette(pa);
  47. label1.show();
  48. return app.exec();
  49. }
  50. #endif



编译后,生成macmainwindow。
设置好QT运行环境变量,运行macmainwindow -qws即可出来显示中文的界面。
可以删除fonts下的很多字体,仅留下SourceHanSansCN-Regular.ttf这个字体,节省空间。

注意:

有可能这样子仍显示乱码,这个是由于你的C文件编码格式有关系,可以使用Notepad++修改C文件编码格式,使用UFT-8无BOM模式。保存后编译没有问题。

实验结果:



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
QT 4.7支持中文(QT4.7)(中文)(makeqpf)
QT中QPF字库的制作与旋转字体的实现
qt arm 使用合适字体和支持中文
Microwindows及其中文化方法
qt 接口(转)
QSplitter 学习
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服