挖井

类库大魔王的挖井日记

挖一口属于自己的井


修正Qt app在Android 7上显示中文字符

今天手头上的Nexus 6通过OTA升级到了Android 7,之后发现几个用Qt写的App显示中文字符全变成方块了。这个问题在当时系统刚升级到6.0时也遇到过,解决办法是自己带一个中文字体,再在程序中指定使用这个中文字体。这是比较繁琐的解决方法,Qt官方也收到了问题报告,只不过修正后的版本还没有发布,但是问题报告下面有人提到了问题代码,所以要自己出个workaround也很容易,只要在自己的程序开头加这么一段代码就可以了:

    QDir dir("/system/fonts");
    const auto entries = dir.entryInfoList(QStringList() << "*.ttc" << "*.ttf" << "*.otf", QDir::Files);
    for (const QFileInfo& fi: entries)
    {
        qWarning() << fi.absoluteFilePath();
        QFontDatabase::addApplicationFont(fi.absoluteFilePath());
    }

另外顺便提一下,Qt要指定font family fallback其实并不复杂,之前还花了不少时间找到的:

    QFont font(qApp->font());
    listFonts << "Droid Sans" << "Source Han Sans" << "Noto Sans";
    font.insertSubstitutions(font.family(),listFonts);
    qApp->setFont(font);

再另外,macOS上JDK可能会有多个,javac可能有多个,其实只要在/Library/Java/JavaVirtualMachines/下面找就行了,选个最高的版本号,比如/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/,Qt Creator上编译Android app需要设置这个Home路径。

本文地址:

https://minidump.info/blog/2016/10/fix-qt-app-displays-cjk-chars-on-android7/

上一篇

济州岛几日游

我终于也算是出过国的人了,上周四到周日,公司组织的旅游,虽然是报了团,但到了济州岛后是自由行。作为第一次出国的人,很多事情都是第一次。幸亏年初把户口迁回老家了可以方便地拿到户口本,不然没有居住证还不能在上海办护照。上海办护照还算方便,可以在微信里预约,外地人要等大半个月才能拿到。济州岛不需要签...…

Life 全文阅读
下一篇

升级到电信100M宽带

前几天预约的升级,今天下午电信维修人员上门来,带了个新的光猫,我说我有个老的单口光猫够用了,能不能保留,维护人员说可以,但新猫还是留下了,说是万一以后用得着。没几分钟,就搞好了。但后来我通过一些测速软件测试了,结果只能达到60M左右!我不知道是因为老光猫的问题,还是拨号用的极路由1s的问题,或...…

network 全文阅读