• 14699阅读
  • 24回复

[原创]Qt开发安卓App时字体要注意的几点 [复制链接]

上一主题 下一主题
离线tompsontan
 

只看楼主 倒序阅读 楼主  发表于: 2013-02-27
       分享下我用necessitas在安卓上开发的经历,主要问题是在真机上中文字体变成了方框“口口”。

1.下面先在necessitas上新建一个Qt Quick 1 Application 来具体分析




2.再在main.qml加入中文




3.真机运行,字体出问题:


4.直接加入中文是不行的,要先在main.cpp中设置加入#include<QFontDatabase>,并通过setFont()函数将安卓系统的字体设为程序默认字体:

//将字体文件名传给addApplicationFont,得到字体的Id
int fontId = QFontDatabase::addApplicationFont("/system/fonts/DroidSansFallback.ttf");    
//将字体Id传给applicationFontFamilies,得到一个QStringList,其中的第一个元素为新添加字体的family    
QString msyh = QFontDatabase::applicationFontFamilies ( fontId ).at(0);    
QFont font(msyh,10);    
app->setFont(font);

5.字体正常显示





6.问题来了,qml的设计器里面看到的预览和真机运行时不一样:

看淡得失
离线tompsontan

只看该作者 1楼 发表于: 2013-02-27
7.因为设计器默认使用的是系统字体(win7为宋体)




8.假如你在设计器里面把宋体改为了其它字体,例如“微软雅黑”,会发现qml中多了一行:

运行,发现字体又是“口口”,因此无法通过设计器来修改中文。

9.解决办法,将安卓的DroidSansFallback.ttf安装到win7系统中,安装之后多了一种字体,不过可能不叫DroidSansFallback,还是会出现上面的问题,因为字体的文件名和字体名会不一样,这时就需要用字体修改软件来修改字体名,改为DroidSansFallback,再安装字体。



看淡得失
离线tompsontan

只看该作者 2楼 发表于: 2013-02-27
10.现在设计器里面的预览就正常了:





真机调试也可以正常显示,和设计器预览效果一致。
看淡得失
离线tompsontan

只看该作者 3楼 发表于: 2013-02-27
由于本人为Qt的初学者,之前也只是集中精力在QtOpenGL,而Qt的其它方面并不熟悉,加上深夜发帖,如果有错,希望指出来,大家交流交流

源码: AndroidApp.zip (2991 K) 下载次数:61

看淡得失
离线uidab

只看该作者 4楼 发表于: 2013-02-27
提示的很详细
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线yxkaibaoma

只看该作者 5楼 发表于: 2013-02-27
楼主v5!~~~
离线tompsontan

只看该作者 6楼 发表于: 2013-02-27
         手机若曾经刷过机,里面的DroidSansFallback.ttf可能不是安卓默认的,用字体软件打开后发现字体名不是DroidSansFallback就要注意了:
        如果我没搞错,在main.cpp中是通过字体文件名(路径)来加载的,而qml中font.family是通过字体名称来加载的。
        所以,在自己的手机上可以正常显示,在别人那里就未必了。
看淡得失
离线XChinux

只看该作者 7楼 发表于: 2013-02-27
引用第6楼feynman于2013-02-27 12:28发表的  :
         手机若曾经刷过机,里面的DroidSansFallback.ttf可能不是安卓默认的,用字体软件打开后发现字体名不是DroidSansFallback就要注意了:
        如果我没搞错,在main.cpp中是通过字体文件名(路径)来加载的,而qml中font.family是通过字体名称来加载的。
        所以,在自己的手机上可以正常显示,在别人那里就未必了。



所以最好是main()中获取到可用中文字体family,然后setFont()设置一下,并将该family名称通过变量引入到QML环境中,在QML中则使用该family
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线tompsontan

只看该作者 8楼 发表于: 2013-02-27
回 7楼(XChinux) 的帖子
可不可以讲下具体怎么引入?我qml刚开始接触
看淡得失
离线XChinux

只看该作者 9楼 发表于: 2013-02-27
看看QtQuick中QML与C++的交互部分。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线xsjqqq123

只看该作者 10楼 发表于: 2013-02-27
qt可以开发安卓?怎样弄啊……
它的webkit在安卓上有用吗?
离线tompsontan

只看该作者 11楼 发表于: 2013-02-27
晒张图,哈哈!




看淡得失
离线XChinux

只看该作者 12楼 发表于: 2013-02-28
效果不错,楼主字体问题解决了吧?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线tompsontan

只看该作者 13楼 发表于: 2013-02-28

      
       getfont()返回了前面main.cpp得到的字体名msyh,这样在机器上可以显示。
       预览问题始终还在:在设计器里面把宋体改为DroidSansFallback方便预览,但是qml中自动加了一行:font.family: "DroidSansFallBack"
就这一句可能会使刷过rom或换过字体的不能正常显示,还是解决不了。

看淡得失
离线tompsontan

只看该作者 14楼 发表于: 2013-02-28
有办法让它取消自动加一句font.family: "DroidSansFallBack"吗?难道要自己编译QtCreator?
看淡得失
在线toby520

只看该作者 15楼 发表于: 2013-03-18
QT果然恨强大,集结各大平台
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
在线toby520

只看该作者 16楼 发表于: 2013-03-29
我上次在mac下面搭建qt for android,运行了一个简单的hello world,发现还不错 哈哈
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线fghfghfgh

只看该作者 17楼 发表于: 2013-04-21
支持楼主啊
离线sicuanyx
只看该作者 18楼 发表于: 2013-05-12
楼主,您是在windows下开发的还是linux下
离线tompsontan

只看该作者 19楼 发表于: 2013-05-12
回 18楼(sicuanyx) 的帖子
WINDOWS
看淡得失
离线gongyuan073

只看该作者 20楼 发表于: 2013-07-14
楼主真心厉害
离线huanghaizilu

只看该作者 21楼 发表于: 2013-07-15
up 楼主
离线夏夜蝈蝈
只看该作者 22楼 发表于: 2013-07-16
具体是要下载哪些套件阿,高手给个链接啊!
离线tompsontan

只看该作者 23楼 发表于: 2013-07-16
回 22楼(夏夜蝈蝈) 的帖子
现在是Qt5.1,支持安卓了,网上也有不少文章,去搜搜呗。。。
看淡得失
离线gwyanping

只看该作者 24楼 发表于: 2013-07-17
哈,,,,,安卓方面的资料还是很少的呀
快速回复
限100 字节
 
上一个 下一个