ブログ

Armadillo:Qt4でいろんなフォントで表示

at_kazutaka.bito
2014年10月31日 21時40分

例として、 Howto : Armadillo-440でQt! 第3回 で作成されたMainWindowにラベルを貼りつけて3種類のフォントで「こんにちは」を表示する方法を示す。

1.Armadillo-440のROMのユーザーランド領域には、日本語Truetypeフォントを複数置けるサイズはないので、予め、Truetypeフォント書き込んだMicroSDをArmadillo-440に挿入して起動する。
(下記サンプルコードでは、TakaoGothic.ttf、TakaoMincho.ttf、sazanami-mincho.ttf をMicroSDに置いた場合である。これらのttfファイルは、ATDEの/usr/share/fonts/truetype/にある。)

2.Armadilloの/usr/local/Trolltech/Qt-4.8.3-qws-armel/lib/fonts のフォントファイルを削除する。(標準では、TakaoPGothic.ttfが存在。)

[armadillo ~]$ ls /usr/local/Trolltech/Qt-4.8.3-qws-armel/lib/fonts
TakaoPGothic.ttf
[armadillo ~]$ rm -f /usr/local/Trolltech/Qt-4.8.3-qws-armel/lib/fonts/*.ttf

3.MicroSDをマウントする。 (Armadillo起動後、マウント済みであれば不要。)

[armadillo ~]# mount /dev/mmcblk0p1 /mnt/

4.QtCreatorで、「編集」を選択して、「mainwindow.cpp」をダブルクリックする。
->mainwindow.cppのソースの編集画面に変わる。

5.mainwindow.cppのインクルードファイルに

#include <QLabel>
#include <QFont>
#include <QTextCodec>
#include <QFontDatabase>

を追加。

MainWindow::MainWindowに下記のように /**** Font Set: begin ****/, /**** Font Set: end ****/で囲んだ範囲を追加。

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

/**** Font Set: begin ****/
    QWidget *cw = new QWidget();
    setCentralWidget(cw);

    QLabel *label = new QLabel(cw);
    QLabel *label2 = new QLabel(cw);
    QLabel *label3 = new QLabel(cw);

    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

    int id = QFontDatabase::addApplicationFont("/mnt/fonts/TakaoGothic.ttf");
    int id2 = QFontDatabase::addApplicationFont("/mnt/fonts/TakaoMincho.ttf");
    int id3 = QFontDatabase::addApplicationFont("/mnt/fonts/sazanami-mincho.ttf");

    QString family = QFontDatabase::applicationFontFamilies(id).at(0);
    QString family2 = QFontDatabase::applicationFontFamilies(id2).at(0);
    QString family3 = QFontDatabase::applicationFontFamilies(id3).at(0);

    label->setGeometry(20, 0, 200, 50);
    label->setFont(QFont(family, 40));
    label->setText(QString::fromUtf8("こんにちは"));

    label2->setGeometry(20, 50, 200, 100);
    label2->setFont(QFont(family2, 40));
    label2->setText(QString::fromUtf8("こんにちは"));

    label3->setGeometry(20, 100, 200, 150);
    label3->setFont(QFont(family3, 40));
    label3->setText(QString::fromUtf8("こんにちは"));
/**** Font Set: end ****/
}

6.ビルドしてデプロイ実行すると、ラベルに3種類のフォントで「こんにちは」と日本語表示される。

7.上記手順3でMicroSDに置いたフォントファイルを変更する場合は、

    int id = QFontDatabase::addApplicationFont("/mnt/fonts/TakaoGothic.ttf");
    int id2 = QFontDatabase::addApplicationFont("/mnt/fonts/TakaoMincho.ttf");
    int id3 = QFontDatabase::addApplicationFont("/mnt/fonts/sazanami-mincho.ttf");

の""内のttfファイル名を変更する。

例えば、MicroSDに VL-Gothic-Regular.ttf を置いて、このフォントに変更する場合は、

    int id = QFontDatabase::addApplicationFont("/mnt/fonts/VL-Gothic-Regular.ttf");

にする。