0

1 つの QLabel を等幅フォントに設定しようとしています。デフォルトでは、デザイナーで他のすべてのラベルを「Arame-Regular」に設定しています。通常、デザイナーでラベルを「Arame-Mono」(等幅フォント) に設定しようとしても機能しません。彼らは定期的に滞在します。

mainwindow.cpp のこのコードの後、アプリケーションのすべてのラベルが等幅に変わります。

    QFontDatabase::addApplicationFont("/path/to/the/fonts/Arame-Mono.ttf");
    QFont monospace("Arame-Mono");
    ui->labelFontTest->setFont(monospace);

これにより、問題の一部が解決されます。等幅フォントを使用できると思いますが、アプリケーションのすべてのラベルを等幅に設定したくありません。この 1 つの特定のラベルのみをアドレス指定して等幅フォントを適用し、他のすべてのラベルを元の状態に保つにはどうすればよいですか?

これのもう 1 つの副作用は、起動時に次のメッセージが表示されることです。

qt.qpa.fonts: Populating font family aliases took 159 ms. Replace uses of missing font family "Arame-Mono" with one that exists to avoid this cost.

私は両方とも、フォントを Mac にローカルにインストールし、.pro ファイルに追加しました。フォントは、プロジェクト ディレクトリ内の fonts フォルダー内にあります。

DISTFILES += \
    Fonts/Arame-Mono.ttf \
    Fonts/Arame-Regular.ttf \

どんな助けでも大歓迎です!

4

1 に答える 1

2

簡単なデモを作成しました。最後のラベルのみが手動でモノスペースに設定されている 3 つのラベルが表示されます。

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);

    using QFD = QFontDatabase;
    if (QFD::addApplicationFont(QStringLiteral(":/Roboto/Roboto-Regular.ttf")) == -1) {
        qWarning() << "Failed to load Roboto-Regular.ttf";
    }
    if (QFD::addApplicationFont(QStringLiteral(":/Roboto_Mono/RobotoMono-Regular.ttf")) == -1) {
        qWarning() << "Failed to load RobotoMono-Regular.ttf";
    }

    QFont regular("Roboto");
    QApplication::setFont(regular);

    MainWindow w;
    w.show();

    return a.exec();
}
    QFont mono("RobotoMono");
    ui->label_3->setFont(mono);

これは問題なく動作します。あなたの場合、mainアプリケーションの通常のフォントを設定することをお勧めします。次に、必要な場合にのみモノスペースを使用します。また、アプリケーションを出荷する予定がある場合は、QtResources ( .qrc) ファイルを使用して実行可能ファイルにフォントを埋め込む必要があることに注意してください。

于 2020-06-11T07:30:40.190 に答える