web-dev-qa-db-ja.com

Qt-リソースからカスタムフォントを追加

このフォントをリソースに追加しました:BYekan.ttf
アプリケーションでこのフォントを使用したい。私はこれを試しました:

    QFont font(":/images/font/BYekan.ttf");
    nLabel->setFont(font);
    nLabel->setText(tr("This is for test"));
    layout->addWidget(nLabel);

しかし、私はそれが機能していないと思います。それの使い方?

編集: この質問 を読んだ後、もう一度試しました:

int fontID(-1);
bool fontWarningShown(false);
QFile res(":/images/font/Yekan.ttf");
if (res.open(QIODevice::ReadOnly) == false) {
    if (fontWarningShown == false) {
        QMessageBox::warning(0, "Application", (QString)"Impossible d'ouvrir la police " + QChar(0x00AB) + " DejaVu Serif " + QChar(0x00BB) + ".");
        fontWarningShown = true;
    }
}else {
    fontID = QFontDatabase::addApplicationFontFromData(res.readAll());
    if (fontID == -1 && fontWarningShown == false) {
        QMessageBox::warning(0, "Application", (QString)"Impossible d'ouvrir la police " + QChar(0x00AB) + " DejaVu Serif " + QChar(0x00BB) + ".");
        fontWarningShown = true;

    }
    else
        nLabel->setFont(QFont(":/images/font/Yekan.ttf", 10));
}

このフォントと他のフォントを比較しましたが、Qtに違いはありません。どうして?

15
Farzan Najipour
int id = QFontDatabase::addApplicationFont(":/fonts/monospace.ttf");
QString family = QFontDatabase::applicationFontFamilies(id).at(0);
QFont monospace(family);
32
Ankur

QMLでは、

FontLoader { id: font; source: "/fonts/font.otf" }
4
kyb

元の質問で報告されたのと同じ問題がありました。上記のコメント(「int id = QFontDatabase :: addApplicationFont ....」で始まる回答)は機能しませんでした。上記のコメントでも確認できます。addApplicationFontは-1を返しました。

その理由は、関数addApplicationFontの呼び出し用の文字列に先行 ':'があるためです。これを外しました。これで動作し(LinuxでのQt 5.5.1およびQt 4.8.6のテスト)、0が返されます。Windowsでは、前にドライブ文字を追加する必要がある場合があります。

注:フォントファイルへの完全パスを指定する必要がありました(例:/usr/share/fonts/ttf/droid/DroidSansFallbackFull.ttf)

0
Ernie Mur