【Qt入門】QFont::setWeight()の基本とQt 5/6での違い

2025-06-06

QFont::setWeight() とは?

QFont::setWeight()は、QtのQFontクラスに属する関数で、**フォントの太さ(ウェイト)**を設定するために使用されます。これにより、テキストを太字にしたり、細字にしたり、中間的な太さにしたりすることができます。

太さの指定方法

setWeight()に渡す引数は整数値であり、これはフォントの太さを表すウェイト値です。Qtでは、このウェイト値を表現するためにQFont::Weightという列挙型(enum)を提供しています。

代表的なQFont::Weightの値と、それに対応する太さの感覚は以下の通りです。

  • QFont::Black: 87 (非常に太字)
  • QFont::Bold: 75 (太字)
  • QFont::DemiBold: 63 (やや太字)
  • QFont::Normal: 50 (標準の太さ)
  • QFont::Light: 25 (細字)

これらの値は、Qtが内部的にフォントの太さを管理するために使用するスケールの一部です。CSSやWindowsのフォントウェイトスケールとは異なる点に注意が必要です。

Qt 6以降の変更点
Qt 6からは、QFont::setWeight()の引数がQFont::Weight列挙型に限定され、OpenType標準のフォントウェイトスケール(100~900)に準拠するようになりました。Qt 5以前では0~99の非標準スケールが使われていましたが、Qt 6では古いスケールを使用するためのsetLegacyWeight()が用意されています。新しいコードではQFont::Weight列挙型を使用することが推奨されます。

C++でのQFont::setWeight()の使用例を以下に示します。

#include <QApplication>
#include <QLabel>
#include <QFont>

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

    // QLabelを作成
    QLabel label("Hello, Qt!");

    // 現在のフォントを取得
    QFont font = label.font();

    // フォントの太さを設定 (太字にする)
    // Qt 6以降では QFont::Bold のように列挙型を使うのが推奨
    font.setWeight(QFont::Bold);

    // フォントをQLabelに設定
    label.setFont(font);

    // ウィンドウを表示
    label.show();

    return app.exec();
}

このコードでは、QLabelに表示されるテキストのフォントを太字に設定しています。



QFont::setWeight()はフォントの太さを設定する便利な機能ですが、いくつかの点で開発者がつまずきやすいポイントがあります。特にQtのバージョンアップ(Qt 5からQt 6への移行)に伴う変更は、よくあるエラーの原因となっています。

Qt 5とQt 6でのウェイト値の違い

エラー/問題
Qt 5で動作していたsetWeight(int)を使ったコードが、Qt 6に移行するとコンパイルエラーになったり、期待通りの太さにならない。

原因
Qt 5までは、setWeight()0から99までの整数値を引数として受け入れていました。これはQt独自の非標準のウェイトスケールでした。 しかし、Qt 6からは、setWeight()QFont::Weightという列挙型を引数として受け取るように変更され、OpenType標準のフォントウェイトスケール(100から900)に準拠するようになりました。

トラブルシューティング

  • コンパイルエラー「invalid conversion from 'int' to 'QFont::Weight'」
    これはQt 6でsetWeight(int)を呼び出そうとした際によく発生するエラーです。前述の通り、QFont::Weight列挙型を使用するようにコードを修正してください。

  • Qt 6以降を使用している場合:

    • setWeight()には、QFont::LightQFont::NormalQFont::BoldQFont::ExtraBoldなどのQFont::Weight列挙値を渡すようにします。
    • もし、以前の0-99の整数値を使用したい場合は、setLegacyWeight()という関数を使用します。ただし、新しいコードではQFont::Weight列挙型を使用することが強く推奨されます。
    // 良い例: QFont::Weight 列挙型を使用
    font.setWeight(QFont::Bold);
    
    // 非推奨 (Qt 5からの移行時など): setLegacyWeight を使用
    // font.setLegacyWeight(75); // Qt 5のBoldに相当
    

設定した太さが反映されない

エラー/問題
setWeight()で太さを設定しても、実際に表示されるテキストの太さが変わらない。

原因とトラブルシューティング

  • フォントキャッシュの問題
    稀に、フォントの変更がすぐに反映されないことがあります。特にアプリケーションの起動時や、動的にフォントを切り替える場合に発生することがあります。

    • 解決策
      アプリケーションを再起動してみる。より確実な方法としては、QFontDatabase::addApplicationFont()などでカスタムフォントを追加している場合、それが正しくロードされているか確認します。
  • スタイルシート(QSS)との競合
    QSS(Qt Style Sheets)でfont-weightプロパティを設定している場合、C++コードでsetWeight()を使用してもQSSの設定が優先されることがあります。

    • QSSのウェイト値
      QSSのfont-weightはCSSの標準に準拠しており、100から900までの数値(normal400bold700に相当)や、normal, bold, lighter, bolderなどのキーワードを使用します。Qt 6のQFont::Weight列挙型の整数値がOpenType標準に準拠しているため、Qt 6のQFont::WeightとQSSの数値はより互換性があります。
    • 解決策
      QSSまたはC++のどちらか一方でフォントの太さを設定するように統一します。または、QSSの優先順位を理解して、意図したスタイルが適用されるように調整します。

    例 (QSS)

    QLabel {
        font-weight: bold; /* または font-weight: 700; */
    }
    
  • QFontオブジェクトがウィジェットに適用されていない
    QFontオブジェクトのsetWeight()を呼び出しただけでは、それが表示されているウィジェットに反映されるわけではありません。変更後のQFontオブジェクトを、関連するウィジェットに再設定する必要があります。

    QFont font = myLabel->font(); // 現在のフォントを取得
    font.setWeight(QFont::Bold);  // 太さを変更
    myLabel->setFont(font);       // 変更をウィジェットに適用
    
  • フォント自体がその太さをサポートしていない
    最も一般的な原因です。多くのフォントは「Normal」と「Bold」の2種類の太さしか持っていません。QFont::LightQFont::ExtraBoldなどを設定しても、フォントファイル自体がそれらの太さを提供していない場合、システムは最も近い太さ(通常はNormalBold)で代替します。

    • 確認方法
      OSのフォント設定ツール(Windowsのフォントビューアなど)で、使用したいフォントが実際に複数のウェイト(Light, Medium, Boldなど)を持っているかを確認します。
    • 解決策
      複数のウェイトをサポートするフォント(例: Noto Sans, Roboto, Open Sansなどの可変フォント)を使用するか、目的の太さが確実に存在するフォントを選択します。

プラットフォーム間の挙動の違い

エラー/問題
あるOSでは期待通りに動作するが、別のOSでは太さが正しく反映されない。

原因とトラブルシューティング

  • 解決策
    • 複数のプラットフォームでテストし、挙動の違いを把握します。
    • クロスプラットフォームで安定して動作する、よく知られたフォントファミリーを使用することを検討します。
    • 特定のウェイトが不可欠な場合は、そのウェイトを持つフォントファイルをアプリケーションにバンドルし、QFontDatabase::addApplicationFont()でロードすることを検討します。
  • 利用可能なフォントの違い
    特定のフォントが特定のOSにしかインストールされていない、または異なるバージョンがインストールされているために、太さのバリエーションが利用できないことがあります。
  • フォントレンダリングエンジンの違い
    各OSには独自のフォントレンダリングエンジンがあり、フォントの太さの解釈や描画方法が異なる場合があります。特に、中間的なウェイト(例: QFont::Medium)は、プラットフォームやフォントによって表示が異なることがあります。

QFont::setWeight()に関連するトラブルシューティングの鍵は、主に以下の3点に集約されます。

  1. QtのバージョンによるsetWeight()の引数の違い(Qt 5 vs Qt 6)を理解する。
  2. 使用しているフォントが、設定しようとしている特定の太さ(ウェイト)を実際にサポートしているかを確認する。


QFont::setWeight() は、テキストの太さ(ウェイト)を設定するために使用されます。Qt のバージョンによって引数の型が異なるため、その違いに注意が必要です。

基本的な使用例 (Qt 6 以降推奨)

この例では、QLabel に表示されるテキストのフォントを「太字」に設定します。

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QVBoxLayout> // レイアウトのために必要

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    // 通常の太さのラベル
    QLabel *normalLabel = new QLabel("これは通常の太さのテキストです。");
    layout->addWidget(normalLabel);

    // 太字のラベル
    QLabel *boldLabel = new QLabel("これは太字のテキストです。");
    QFont boldFont = boldLabel->font(); // 現在のフォントを取得
    // Qt 6以降では QFont::Weight 列挙型を使用するのが推奨されます
    boldFont.setWeight(QFont::Bold); // 太字に設定
    boldLabel->setFont(boldFont); // ラベルにフォントを適用
    layout->addWidget(boldLabel);

    // 細字のラベル (フォントがLightウェイトをサポートしている場合)
    QLabel *lightLabel = new QLabel("これは細字のテキストです。");
    QFont lightFont = lightLabel->font();
    lightFont.setWeight(QFont::Light); // 細字に設定
    lightLabel.setFont(lightFont);
    layout->addWidget(lightLabel);

    // 非常に太いラベル (フォントがBlackウェイトをサポートしている場合)
    QLabel *blackLabel = new QLabel("これは非常に太いテキストです。");
    QFont blackFont = blackLabel->font();
    blackFont.setWeight(QFont::Black); // 非常に太く設定
    blackLabel.setFont(blackFont);
    layout->addWidget(blackLabel);

    window.setWindowTitle("QFont::setWeight() の例");
    window.show();

    return app.exec();
}

解説

  • 変更された QFont オブジェクトを label->setFont(boldFont) で再度 QLabel に設定することで、変更が反映されます。
  • setWeight() を呼び出し、QFont::BoldQFont::Light などの QFont::Weight 列挙値を引数として渡します。これにより、フォントの太さが指定されます。
  • QLabel の現在のフォントを取得するために label->font() を呼び出します。これにより、現在のフォント設定(フォントファミリー、サイズなど)が引き継がれます。
  • QLabel オブジェクトを作成し、表示するテキストを設定します。
  • QApplicationQLabelQFont ヘッダをインクルードします。

Qt 5 と Qt 6 の違いを意識した例

Qt 5とQt 6で同じウェイト値を使いたい場合、setLegacyWeight() の使用を検討することもありますが、基本的にはQt 6の新しいAPIに移行することが推奨されます。

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QVBoxLayout>

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QLabel *labelQt6 = new QLabel("Qt 6: QFont::Bold を使用");
    QFont fontQt6 = labelQt6->font();
    // Qt 6の推奨される方法
    fontQt6.setWeight(QFont::Bold);
    labelQt6->setFont(fontQt6);
    layout->addWidget(labelQt6);

    QLabel *labelLegacy = new QLabel("Qt 6: setLegacyWeight(75) を使用 (非推奨)");
    QFont fontLegacy = labelLegacy->font();
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
    // Qt 6でQt 5のウェイト値を再現したい場合
    fontLegacy.setLegacyWeight(75); // 75はQt 5でのBoldに相当
#else
    // Qt 5の場合
    fontLegacy.setWeight(75);
#endif
    labelLegacy->setFont(fontLegacy);
    layout->addWidget(labelLegacy);

    window.setWindowTitle("Qt 5 vs Qt 6 Weight");
    window.show();

    return app.exec();
}

解説

  • Qt 6では、setLegacyWeight(75) を使用することで、Qt 5のsetWeight(75) と同様の太さを設定できます。しかし、これは一時的な互換性のためのものであり、新しいコードではQFont::Weight列挙型を使用するべきです。
  • #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) を使用して、Qt 6以降の環境とそれ以前の環境でコードを切り替える例を示しています。

コンストラクタでのウェイト指定

QFont オブジェクトを生成する際に、コンストラクタで太さを指定することも可能です。

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QVBoxLayout>

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    // コンストラクタでフォントファミリー、サイズ、ウェイトを指定
    // QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false)
    QFont myCustomFont("Arial", 16, QFont::ExtraBold); // Arialフォント、16pt、ExtraBold

    QLabel *labelCustom = new QLabel("これはカスタムフォントとウェイトです。");
    labelCustom->setFont(myCustomFont);
    layout->addWidget(labelCustom);

    window.setWindowTitle("QFont コンストラクタでのウェイト指定");
    window.show();

    return app.exec();
}
  • QFont のコンストラクタに、フォントファミリー名、ポイントサイズ、そしてウェイト(QFont::ExtraBold)を直接渡しています。これにより、setWeight() を後から呼び出す手間を省くことができます。


QFont::setWeight() の代替方法

QFont::setWeight() はフォントの太さを直接設定する最も直接的な方法ですが、状況によっては他のアプローチの方が適している場合があります。以下にいくつかの代替方法を挙げます。

QFont コンストラクタでのウェイト指定

QFont オブジェクトを初期化する際に、コンストラクタでフォントの太さを直接指定することができます。これは、新しいフォントオブジェクトを作成する際に特に便利です。

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QVBoxLayout>

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    // QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false)
    // フォントファミリー、サイズ、ウェイトを指定
    QFont customFont("Arial", 14, QFont::Bold); // Arial、14pt、太字

    QLabel *label = new QLabel("これはコンストラクタで設定された太字のテキストです。");
    label->setFont(customFont); // ラベルにフォントを適用
    layout->addWidget(label);

    window.setWindowTitle("QFont コンストラクタでのウェイト指定");
    window.show();

    return app.exec();
}

利点

  • 既存のフォントオブジェクトを変更するのではなく、新しいフォントを定義する場合に適しています。
  • QFont オブジェクトの作成と同時に太さを設定できるため、コードが簡潔になります。

Qt Style Sheets (QSS) を使用する

Qt Style Sheets (QSS) は、CSSに似た構文でウィジェットのスタイルを設定する強力な方法です。font-weight プロパティを使用することで、ウィジェットのフォントの太さを設定できます。これは、アプリケーションのルック&フィールを一元的に管理したい場合に特に効果的です。

#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>
#include <QPushButton> // スタイルシートの適用例

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QLabel *label = new QLabel("これはスタイルシートで太字になったテキストです。");
    // QLabelに直接スタイルシートを適用
    label->setStyleSheet("font-weight: bold; font-size: 16px; color: blue;");
    layout->addWidget(label);

    QPushButton *button = new QPushButton("ボタンテキスト");
    // アプリケーション全体、または特定のウィジェットにスタイルシートを適用することも可能
    // QSSのfont-weightはCSSの標準に準拠 (normal=400, bold=700など)
    button->setStyleSheet("font-weight: 700;"); // 数値で太さを指定
    layout->addWidget(button);

    window.setWindowTitle("Qt Style Sheets でのウェイト設定");
    window.show();

    return app.exec();
}

利点

  • CSS互換性
    CSSの font-weight プロパティは normalboldlighterbolder といったキーワードや、100 から 900 までの数値(normal400bold700 に相当)を受け入れます。
  • 動的な変更
    ランタイムにスタイルシートをロードし直すことで、UIのテーマを動的に変更することが可能です。
  • 柔軟性
    グローバルに(qApp->setStyleSheet())、特定のウィジェットに、または特定のクラスにスタイルを適用できます。

注意点

  • QSSで設定されたスタイルは、C++コードで setFont() を使って設定されたスタイルよりも優先される場合があります。競合が発生しないように注意が必要です。

HTML タグを使用する (リッチテキスト対応ウィジェット)

QLabelQTextEdit のようにリッチテキストをサポートするウィジェットでは、HTMLタグを使用してテキストの一部または全体の太さを設定することができます。

#include <QApplication>
#include <QLabel>
#include <QTextEdit>
#include <QVBoxLayout>

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QLabel *labelHtml = new QLabel();
    // <b>タグで太字に
    labelHtml->setText("これは<b>HTMLタグ</b>で太字になったテキストです。");
    layout->addWidget(labelHtml);

    QTextEdit *textEdit = new QTextEdit();
    // <strong>タグも太字に
    textEdit->setHtml("これは一般的なテキストです。<br><strong>これは強調された(太字の)テキストです。</strong>");
    layout->addWidget(textEdit);

    window.setWindowTitle("HTML タグでのウェイト設定");
    window.show();

    return app.exec();
}

利点

  • テキストコンテンツの一部としてスタイルを埋め込むことができます。
  • テキストの一部だけを太字にしたい場合に非常に便利です。

注意点

  • 厳密なフォントの太さ(LightExtraBold など)を制御することはできません。主に normalbold の切り替えに限定されます。
  • ウィジェットがリッチテキストレンダリングをサポートしている必要があります。

QFontMetrics でのフォント情報取得

これは直接的な「設定」方法ではありませんが、設定されているフォントの太さを確認するために QFontMetrics を使用する方法があります。

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QFontMetrics>
#include <QVBoxLayout>

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

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    QLabel *label = new QLabel("テキストの太さを確認");
    QFont font = label->font();
    font.setWeight(QFont::Bold);
    label->setFont(font);
    layout->addWidget(label);

    // 設定されたフォントのメトリクスを取得
    QFontMetrics fm(label->font());
    QLabel *weightInfoLabel = new QLabel();
    weightInfoLabel->setText(QString("設定されたフォントウェイト: %1").arg(fm.weight()));
    layout->addWidget(weightInfoLabel);

    window.setWindowTitle("QFontMetrics でのウェイト確認");
    window.show();

    return app.exec();
}

利点

  • 現在のフォントの太さをプログラムで確認できます。デバッグや動的な調整に役立ちます。

QFont::setWeight() はフォントの太さをプログラムで設定する標準的な方法ですが、以下の代替方法も検討することで、より柔軟で保守しやすいコードを書くことができます。

  • 設定された太さを確認したい場合
    QFontMetrics
  • リッチテキスト内で部分的に太字にしたい場合
    HTMLタグ
  • UIの見た目を一元的に管理したい場合
    Qt Style Sheets (QSS)
  • 新しい QFont オブジェクトを作成する場合
    QFont コンストラクタ

これらの方法を適切に使い分けることで、Qtアプリケーションのフォント表示をより効果的に制御できます。 Qt プログラミングにおいて QFont::setWeight() 以外でフォントの太さを設定する、あるいは太字に見せるための代替方法をいくつかご紹介します。

QFont::setWeight() はフォントの太さを直接設定する主要な方法ですが、状況によっては他のアプローチの方が適している場合があります。

QFont::setBold(bool enable) の使用

最も直接的な代替手段であり、フォントを太字にするかどうかのオン/オフを切り替えるシンプルな方法です。

  • 使用例

    #include <QApplication>
    #include <QLabel>
    #include <QFont>
    #include <QVBoxLayout>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QWidget window;
        QVBoxLayout *layout = new QVBoxLayout(&window);
    
        QLabel *normalLabel = new QLabel("通常のテキスト");
        layout->addWidget(normalLabel);
    
        QLabel *boldLabel = new QLabel("setBold(true) で太字");
        QFont font = boldLabel->font();
        font.setBold(true); // 太字にする
        boldLabel->setFont(font);
        layout->addWidget(boldLabel);
    
        QLabel *notBoldLabel = new QLabel("setBold(false) で通常に戻す");
        QFont anotherFont = notBoldLabel->font();
        anotherFont.setBold(false); // 通常に戻す
        notBoldLabel->setFont(anotherFont);
        layout->addWidget(notBoldLabel);
    
        window.setWindowTitle("QFont::setBold() の例");
        window.show();
    
        return app.exec();
    }
    
  • 利点

    • コードがシンプルで読みやすい。
    • 太字にするかしないかの二択で十分な場合に便利。
    • 引数に true を渡すと太字に、false を渡すと通常の太さ(QFont::Normal に相当)になります。
    • 内部的には setWeight(QFont::Bold) または setWeight(QFont::Normal) を呼び出します。
    • 特定のウェイト値(Light, DemiBoldなど)は設定できません。

Qt Style Sheets (QSS) は、Qt ウィジェットの外観を CSS のような構文で設定するための強力なメカニズムです。フォントの太さも QSS で設定できます。

  • 使用例

    #include <QApplication>
    #include <QLabel>
    #include <QVBoxLayout>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QWidget window;
        QVBoxLayout *layout = new QVBoxLayout(&window);
    
        QLabel *label1 = new QLabel("デフォルトの太さ");
        layout->addWidget(label1);
    
        QLabel *label2 = new QLabel("QSSで太字 (bold)");
        label2->setObjectName("myBoldLabel"); // スタイルシートで参照するためのオブジェクト名を設定
        layout->addWidget(label2);
    
        QLabel *label3 = new QLabel("QSSでウェイト700");
        label3->setObjectName("myWeight700Label");
        layout->addWidget(label3);
    
        QLabel *label4 = new QLabel("QSSでライト (lighter)");
        label4->setObjectName("myLightLabel");
        layout->addWidget(label4);
    
        // スタイルシートを適用
        window.setStyleSheet(
            "QLabel#myBoldLabel { font-weight: bold; }"           // オブジェクト名で指定
            "QLabel#myWeight700Label { font-weight: 700; }"      // 数値で指定 (700はboldに相当)
            "QLabel#myLightLabel { font-weight: lighter; }"      // lighter キーワード
        );
    
        window.setWindowTitle("QSS でのフォントウェイト設定");
        window.show();
    
        return app.exec();
    }
    
  • 欠点

    • 複雑なフォントのカスタマイズ(例: フォントの可変軸の設定)には不向き。
    • C++ と QSS で同じプロパティを設定すると、優先順位の問題が発生する可能性がある。
  • 利点

    • UI の見た目を C++ コードから分離でき、デザインの変更が容易。
    • 複数のウィジェットに一貫したスタイルを適用しやすい。
    • 動的なスタイルの変更も可能(setStyleSheet() を再呼び出し)。
  • 特徴

    • font-weight プロパティを使用します。
    • CSS の標準ウェイト値(normal, bold, lighter, bolder)や数値(100から900)に対応しています。
    • アプリケーション全体、特定のウィジェットクラス、または特定のオブジェクト名を持つウィジェットに対してスタイルを適用できます。
    • Qt 6のQFont::Weight列挙型の整数値はOpenType標準に準拠しているため、QSSの数値とより互換性があります。

リッチテキスト(HTML)の使用 (QTextEdit, QLabel など)

QTextEdit や、リッチテキストモードを有効にした QLabel などでは、HTML タグを使用してテキストの太さを制御できます。

  • 使用例

    #include <QApplication>
    #include <QLabel>
    #include <QTextEdit>
    #include <QVBoxLayout>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QWidget window;
        QVBoxLayout *layout = new QVBoxLayout(&window);
    
        // QLabel でリッチテキストを使用
        QLabel *htmlLabel = new QLabel();
        htmlLabel->setText("一部を<b>太字</b>に、そして<span style=\"font-weight: 600;\">少し太く</span>表示します。");
        layout->addWidget(htmlLabel);
    
        // QTextEdit でリッチテキストを使用
        QTextEdit *textEdit = new QTextEdit();
        textEdit->setHtml("<p>これは <b>QTextEdit</b> 内の太字テキストです。</p>"
                          "<p style=\"font-weight: 900;\">非常に太いテキストも可能です。</p>");
        layout->addWidget(textEdit);
    
        window.setWindowTitle("リッチテキストでのフォントウェイト設定");
        window.show();
    
        return app.exec();
    }
    
  • 欠点

    • 純粋なテキスト表示にはオーバーヘッドがある。
    • HTMLのパースとレンダリングに依存するため、完全なフォント制御ができない場合がある。
  • 利点

    • テキストのセグメントごとに異なるスタイルを適用できる。
    • HTML の知識があれば直感的に使える。
  • 特徴

    • <b> タグまたは <strong> タグを使用して太字にできます。
    • font-weight スタイルプロパティをインラインスタイルとして使用することも可能です。
    • テキストの一部だけを太字にしたい場合に特に便利です。

QFont::setStretch(int factor) の使用(太さとは異なるが関連する概念)

setStretch() はフォントの太さを直接変更するものではありませんが、文字の横方向の引き伸ばし(ストレッチ)を設定します。これにより、見た目の「太さ」に影響を与えることがあります。

  • 使用例

    #include <QApplication>
    #include <QLabel>
    #include <QFont>
    #include <QVBoxLayout>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QWidget window;
        QVBoxLayout *layout = new QVBoxLayout(&window);
    
        QLabel *normalStretchLabel = new QLabel("通常のストレッチ");
        layout->addWidget(normalStretchLabel);
    
        QLabel *condensedLabel = new QLabel("凝縮されたストレッチ (50)");
        QFont condensedFont = condensedLabel->font();
        condensedFont.setStretch(50); // 凝縮
        condensedLabel->setFont(condensedFont);
        layout->addWidget(condensedLabel);
    
        QLabel *expandedLabel = new QLabel("拡張されたストレッチ (200)");
        QFont expandedFont = expandedLabel->font();
        expandedFont.setStretch(200); // 拡張
        expandedLabel->setFont(expandedFont);
        layout->addWidget(expandedLabel);
    
        window.setWindowTitle("QFont::setStretch() の例");
        window.show();
    
        return app.exec();
    }
    
  • 欠点

    • 太さそのものを調整する目的には向かない。
    • 全てのフォントがストレッチをサポートしているわけではない。
  • 利点

    • 通常の太さ調整とは異なる視覚効果を得られる。
  • 特徴

    • factor は1から4000までの整数値で、100が標準のストレッチです。
    • 値を大きくすると文字が横に広がり、値を小さくすると横に圧縮されます。
    • フォント自体がストレッチをサポートしている必要があります。