のねのBlog

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

QT5 Windowsで開発し、Androidで実行 埋め込みビットマップの表示

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

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

#define TR(s) (QString::fromUtf8(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)
{
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

    ui->setupUi(this);

    QString path = ":/fonts/";

    QString fileNameOrg = path + "org.ttf";
    QFontDatabase databaseOrg;
    if(canAddDb(databaseOrg, fileNameOrg))
    {
        QFont f = databaseOrg.font("myfont","Normal",12);
        f.setStyleHint(QFont::AnyStyle,
                       QFont::StyleStrategy(
                             QFont::PreferBitmap
                           | QFont::NoAntialias));
        f.setFixedPitch(true);
        f.setPixelSize(12);
        ui->label01->setFont(f);
        ui->label02->setFont(f);
        ui->label03->setFont(f);
        ui->label04->setFont(f);
        ui->label05->setFont(f);
        ui->label06->setFont(f);
        ui->label07->setFont(f);
        ui->label08->setFont(f);
    }

    QString fileNameEbdt = path + "ebdt12.ttf";
    QFontDatabase databaseEbdt;
    if(canAddDb(databaseEbdt, fileNameEbdt))
    {
        QFont f = databaseEbdt.font("myEbdt","Normal",12);
        f.setStyleHint(QFont::AnyStyle,
                       QFont::StyleStrategy(
                             QFont::PreferBitmap
                           | QFont::NoAntialias));
        f.setFixedPitch(true);
        f.setPixelSize(12);
        ui->label11->setFont(f);
        ui->label12->setFont(f);
        ui->label13->setFont(f);
        ui->label14->setFont(f);
        ui->label15->setFont(f);
        ui->label16->setFont(f);
        ui->label17->setFont(f);
        ui->label18->setFont(f);
    }

    QString str01 = fileNameOrg;
    QString str02 = TR("!#$%&<>?_+*=~{} 0123456789");
    QString str03 = TR("abcdefghijklmnopqrstuvwxyz");
    QString str04 = TR("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    QString str05 = TR("美しい文字 あいうえお");
    QString str06 = TR("5月1日には西日本の上空およそ5500メートルに-21℃以下");
    QString str07 = TR("、東日本の上空に-24℃以下の寒気が流れ込むため、");
    QString str08 = TR("西~東日本にかけて大気の状態が非常に不安定となる見込み。");

    ui->label01->setText(str01);
    ui->label02->setText(str02);
    ui->label03->setText(str03);
    ui->label04->setText(str04);
    ui->label05->setText(str05);
    ui->label06->setText(str06);
    ui->label07->setText(str07);
    ui->label08->setText(str08);

    QString str11 = fileNameEbdt;
    ui->label11->setText(str11);
    ui->label12->setText(str02);
    ui->label13->setText(str03);
    ui->label14->setText(str04);
    ui->label15->setText(str05);
    ui->label16->setText(str06);
    ui->label17->setText(str07);
    ui->label18->setText(str08);
}

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