のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

QT5 Android 文字化け 埋め込みビットマップ

Androidで表示すると、文字化けする。
埋め込みBitmapだからなのかな?

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QFontDatabase>
#include <QMessageBox>
#include <QTextCodec>
#include <QString>
#include <QFile>

#include <QDebug>

//#define TR(s) (QString::fromLocal8Bit(s))
#define TR(s) (QString::fromUtf8(s))
//#define TR(s) (tr(s))

bool MainWindow::canOpenFontFile(QString fileName)
{
    if (fileName.isEmpty())
    {
        return false;
    } else {
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly))
        {
            QMessageBox::information(
                        this,
                        TR("Unable to open file:\n"),
                        file.errorString()+ "\n"+fileName);
            return false;
        }
    }
    return true;
}

bool MainWindow::canAddDb(QFontDatabase database, QString fileName)
{
    if (canOpenFontFile(fileName))
    {
        int result = database.addApplicationFont(fileName);
        if (result == -1)
        {
            QMessageBox::information(
                        this, TR("Unable to install font file:\n"),
                        "fileName="+fileName);
            return false;
        }
    }
    return true;
}

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

//   QString path = QCoreApplication::applicationDirPath() + "/";
//   QString fileName = path +"org.ttf";

    QString path = ":/fonts/";
    QString fileName = path + "org.ttf";

    QFontDatabase database;

    if(canAddDb(database, fileName))
    {
        QFont f = database.font("myfont","Normal",30);
        f.setFixedPitch(true);
        f.setPixelSize(12);
        ui->label01->setFont(f);
        ui->label02->setFont(f);
        ui->label03->setFont(f);
    }

    //const char *str1 = u8"あいう";
    QString str01 = path;
    QString str02 = TR("!#$%& 0123456789 abcdefghijklmnopqrstuvwxyz");
    QString str03 = TR("美しい文字 あいうえお");
    //QString str03 = TR("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    qDebug().noquote() << str01;
    qDebug().noquote() << str02;
    qDebug().noquote() << str03;
    qDebug() << str01;
    qDebug() << str02;
    qDebug() << str03;

    ui->label01->setText(str01);
    ui->label02->setText(str02);
    ui->label03->setText(str03);
qDebug() << ui->label03->text();

    ui->label04->setText(str01);
    ui->label05->setText(str02);
    ui->label06->setText(str03);

    QString str11 = path;
    ui->label11->setText(str11);
    ui->label12->setText(TR("!#$%& 0123456789 abcdefghijklmnopqrstuvwxyz 美しい文字 あいうえお"));
    ui->label13->setText(TR("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
}

MainWindow::~MainWindow()
{
    delete ui;
}

以下の行を追加したら、表示するようになった。
埋め込みBMPには、これが必要なようだ。

       f.setStyleHint(QFont::AnyStyle,
                       QFont::StyleStrategy(QFont::PreferBitmap|QFont::NoAntialias));

eighttails.seesaa.net