プログラマー必見!Qtでコード表示に最適な等幅フォントを設定する方法

2025-06-06

QFont::setFixedPitch() は、Qt の QFont クラスのメンバー関数で、フォントが**固定ピッチ(等幅)**であるかどうかを設定または確認するために使用されます。

固定ピッチフォントとは、そのフォントに含まれるすべての文字('i' や 'W' のような幅の異なる文字であっても)が、同じ水平方向の幅を持つフォントのことです。これに対し、プロポーショナルフォントは、文字ごとに幅が異なります。

なぜ固定ピッチフォントが必要か?

固定ピッチフォントは、特に以下のような場面で非常に重要になります。

  1. プログラミングコードの表示
    コードは通常、インデントやアライメントが重要であり、固定ピッチフォントを使用することで、文字がずれることなく、行や列がきれいに揃って表示されます。
  2. 表形式データの表示
    データの列を揃える必要がある場合、固定ピッチフォントは視覚的な整合性を保つのに役立ちます。
  3. 端末エミュレータ
    昔ながらのターミナルやコンソールアプリケーションは、伝統的に固定ピッチフォントを使用します。

setFixedPitch() の使い方

setFixedPitch() には、bool 型の引数を渡します。

  • font.setFixedPitch(false);:このフォントを固定ピッチフォントとして扱わないようにします(通常はプロポーショナルフォントとして扱われます)。
  • font.setFixedPitch(true);:このフォントを固定ピッチフォントとして扱おうとします。

注意点

setFixedPitch(true) を呼び出しても、実際にそのフォントが固定ピッチである保証はありません。 Qt は、指定されたフォントが固定ピッチであることをヒントとして受け取り、フォントシステムが利用可能な最も適切な固定ピッチフォントを選択しようとします。フォントそのものが固定ピッチでない場合、またはシステムに適切な固定ピッチフォントがない場合、見た目が固定ピッチにならない可能性もあります。

正確には、QFontInfo::fixedPitch() を使用して、実際にフォントが固定ピッチであるかどうかを確認できます。

コード例

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

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

    QLabel labelFixed("This is some fixed-pitch text: iiiiiiiii WWWWWWWWW");
    QFont fontFixed = labelFixed.font(); // 現在のフォントを取得
    fontFixed.setFamily("Cascadia Code"); // 例として固定ピッチフォントを指定
    fontFixed.setPointSize(12);
    fontFixed.setFixedPitch(true); // 固定ピッチとして設定
    labelFixed.setFont(fontFixed);

    // 実際に固定ピッチであるか確認
    QFontInfo infoFixed(fontFixed);
    if (infoFixed.fixedPitch()) {
        labelFixed.setText(labelFixed.text() + "\n(実際に固定ピッチです)");
    } else {
        labelFixed.setText(labelFixed.text() + "\n(固定ピッチではありません)");
    }
    labelFixed.show();


    QLabel labelProportional("This is some proportional text: iiiiiiiii WWWWWWWWW");
    QFont fontProportional = labelProportional.font();
    fontProportional.setFamily("Arial"); // プロポーショナルフォントを指定
    fontProportional.setPointSize(12);
    fontProportional.setFixedPitch(false); // 固定ピッチではないと設定(デフォルト値)
    labelProportional.setFont(fontProportional);

    // 実際に固定ピッチであるか確認
    QFontInfo infoProportional(fontProportional);
    if (infoProportional.fixedPitch()) {
        labelProportional.setText(labelProportional.text() + "\n(実際に固定ピッチです)");
    } else {
        labelProportional.setText(labelProportional.text() + "\n(固定ピッチではありません)");
    }
    labelProportional.move(0, 100); // 位置をずらす
    labelProportional.show();

    return app.exec();
}


QFont::setFixedPitch() は、フォントを固定ピッチ(等幅)として扱うようQtに「ヒント」を与える関数ですが、いくつか誤解されやすい点や、期待通りに動作しない場合の落とし穴があります。

固定ピッチにならない、または意図しないフォントが選択される

一般的な原因

  • スタイルシートとの競合
    ウィジェットにQtスタイルシートが適用されている場合、スタイルシートのフォント設定が setFont()setFixedPitch() によるプログラム的な設定よりも優先されることがあります。
  • Qtのバージョンによる挙動の違い
    古いQtのバージョン(特にQt4からQt5への移行期)では、setFixedPitch() の挙動に違いが見られたという報告があります。特定のバージョンで問題が発生する場合は、そのバージョンの既知のバグや変更点を調べる必要があります。
  • Qtのフォントマッチングの挙動
    Qtのフォントマッチングは、fontFamily を最優先し、その後に fixedPitchpointSizeweightstyle などの属性を考慮します。もし指定した fontFamily が見つかり、それがプロポーショナルなものであった場合、setFixedPitch(true) が無視されるか、別のフォントが選択されることがあります。
  • システムに適切な固定ピッチフォントがない
    特定のフォントファミリーで固定ピッチを設定しても、そのフォントの固定ピッチ版がユーザーのシステムにインストールされていない場合、Qtは代替のフォントを選択します。この代替フォントが意図したものでないことがあります。
  • 指定したフォントがそもそも固定ピッチではない
    setFixedPitch(true) を呼び出しても、そのフォントファミリーの中に固定ピッチのバリアントが存在しない場合、Qtはシステム内の別の固定ピッチフォントを探すか、フォントファミリーのプロポーショナル版を使用する可能性があります。

トラブルシューティング

  • 異なるOSでのテスト
    Windows、macOS、Linuxなど、異なるOSで挙動が異なる場合があります。それぞれのOSでテストし、特定のOSでのみ問題が発生する場合は、そのOS固有のフォント設定やレンダリングの問題を調査します。
  • スタイルシートの確認
    もしスタイルシートを使っているなら、関連するフォント設定がないか確認し、必要に応じて調整または削除します。スタイルシートでフォントを設定する場合は、font-family プロパティで固定ピッチフォントを指定します。
    QLabel {
        font-family: "Monospace";
        /* fixed-pitchに明示的に指定するプロパティはCSSにはありませんが、
           Monospaceのような固定ピッチフォントファミリーを指定します。 */
    }
    
  • QFontDatabase を使う
    システムにインストールされている利用可能なフォントを調べ、固定ピッチフォントを見つけるのに役立ちます。QFontDatabase::standardFixedFont() を使うと、プラットフォームのデフォルトの固定ピッチフォントを取得できます。
    QFont fixedFont = QFontDatabase::standardFixedFont();
    // または QFontDatabase::families() で全フォントファミリーをリストアップし、
    // QFontDatabase::isFixedPitch() で個別に確認する
    
  • 明確な固定ピッチフォントファミリーを指定する
    "Monospace", "Courier New", "Consolas", "Source Code Pro", "Cascadia Code" など、確実に固定ピッチとして知られているフォントファミリーを setFamily() で指定してみる。
  • QFontInfo::fixedPitch() で確認する
    フォントをウィジェットに設定した後、QFontInfo オブジェクトを使って実際にそのフォントが固定ピッチとしてレンダリングされているかを確認します。
    QFont font = label->font();
    font.setFamily("monospace"); // または特定の固定ピッチフォント
    font.setFixedPitch(true);
    label->setFont(font);
    
    QFontInfo fontInfo(label->font()); // ウィジェットに設定された実際のフォント情報
    if (fontInfo.fixedPitch()) {
        qDebug() << "フォントは固定ピッチです。";
    } else {
        qDebug() << "フォントは固定ピッチではありません。";
    }
    

フォントの属性が正しく適用されない(太さ、イタリックなど)

一般的な原因

  • フォントファミリーのバリアント不足
    指定したフォントファミリーに、要求された太さ(Bold)やスタイル(Italic)の固定ピッチ版が存在しない場合、Qtはそれを再現できないことがあります。
  • setFixedPitch(true) と他の属性の競合
    Qtのドキュメントにもあるように、setFixedPitch(true) を設定すると、style()weight() のような他のスタイル属性がフォントマッチングで無視される可能性があります。これは、固定ピッチの要求が他の属性よりも優先されるためです。

トラブルシューティング

  • フォントファミリーをより具体的に指定する
    "Courier New Bold" のように、フォントファミリー名に直接スタイルやウェイトを含めて指定することで、Qtがより正確なフォントを見つけやすくなることがあります。
  • フォントデータベースで確認
    QFontDatabase を使って、特定のフォントファミリーがどのようなスタイルやウェイトのバリアントを持っているかを確認します。例えば、QFontDatabase::styles("Font Family Name")QFontDatabase::weights("Font Family Name", "Style Name") など。
  • 固定ピッチを優先し、他の属性は妥協する
    厳密に固定ピッチを維持したい場合、BoldやItalicなどの属性は、そのフォントがサポートしている範囲でしか適用されないことを理解しておく必要があります。

パフォーマンスの問題

一般的な原因

  • フォントキャッシュの問題
    Qtはフォント情報をキャッシュしますが、稀にキャッシュが壊れたり、最新の状態でないために問題を引き起こすことがあります。
  • 多数のフォントがインストールされている
    システムに大量のフォントがインストールされている場合、Qtのフォントマッチングや検索に時間がかかり、アプリケーションの起動やフォント変更時に遅延が発生することがあります。
  • アプリケーション起動時のフォント設定の見直し
    アプリケーションの起動時に、必要最低限のフォント設定のみを行い、必要に応じて動的にフォントをロードまたは変更するように設計を見直します。
  • フォントの数を減らす (開発環境)
    開発機で多数のフォントをインストールしている場合は、試用的に数を減らしてみるとパフォーマンスへの影響を確認できます。


QFont::setFixedPitch() を使ったプログラミング例 (Qt)

QFont::setFixedPitch() は、フォントを固定ピッチ(等幅)として扱いたい場合に非常に役立ちます。ここでは、具体的なコード例を通して、その使い方と関連するベストプラクティスを説明します。

基本的な使用例: QLabel で固定ピッチフォントを表示する

この例では、2つの QLabel を作成し、一方は固定ピッチフォント、もう一方はプロポーショナルフォントでテキストを表示します。これにより、両者の違いを視覚的に確認できます。

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QFontInfo> // フォント情報を取得するために必要
#include <QVBoxLayout> // レイアウトのために必要
#include <QWidget> // メインウィンドウとして必要

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

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

    // --- 固定ピッチフォントの例 ---
    QLabel *fixedPitchLabel = new QLabel(&window);
    fixedPitchLabel->setText("固定ピッチ:\n"
                             "iiiiiiiiii WWWWWWWWWW\n"
                             "1234567890 1234567890");

    QFont fixedFont = fixedPitchLabel->font(); // 現在のフォントをベースにする
    // 固定ピッチとして知られているフォントファミリーを試します。
    // システムにインストールされているものを選んでください。
    // 例: "Courier New", "Consolas", "Monospace", "Source Code Pro", "Cascadia Code"
    fixedFont.setFamily("Consolas"); // または "Monospace" など
    fixedFont.setPointSize(12);
    fixedFont.setFixedPitch(true); // ★ここに注目: 固定ピッチとして設定
    fixedPitchLabel->setFont(fixedFont);

    // 実際に固定ピッチであるか確認(デバッグ用)
    QFontInfo fixedFontInfo(fixedPitchLabel->font());
    if (fixedFontInfo.fixedPitch()) {
        fixedPitchLabel->setText(fixedPitchLabel->text() + "\n(実際は固定ピッチです)");
        fixedPitchLabel->setStyleSheet("QLabel { background-color: #e0ffe0; }"); // 緑の背景
    } else {
        fixedPitchLabel->setText(fixedPitchLabel->text() + "\n(実際は固定ピッチではありません)");
        fixedPitchLabel->setStyleSheet("QLabel { background-color: #ffe0e0; }"); // 赤の背景
    }
    layout->addWidget(fixedPitchLabel);


    // --- プロポーショナルフォントの例 ---
    QLabel *proportionalLabel = new QLabel(&window);
    proportionalLabel->setText("プロポーショナル:\n"
                                "iiiiiiiiii WWWWWWWWWW\n"
                                "1234567890 1234567890");

    QFont proportionalFont = proportionalLabel->font();
    proportionalFont.setFamily("Arial"); // プロポーショナルフォントとして知られているものを選択
    proportionalFont.setPointSize(12);
    proportionalFont.setFixedPitch(false); // ★ここに注目: 固定ピッチではないと設定(デフォルト値だが明示的に)
    proportionalLabel->setFont(proportionalFont);

    // 実際に固定ピッチであるか確認(デバッグ用)
    QFontInfo proportionalFontInfo(proportionalLabel->font());
    if (proportionalFontInfo.fixedPitch()) {
        proportionalLabel->setText(proportionalLabel->text() + "\n(実際は固定ピッチです)");
        proportionalLabel->setStyleSheet("QLabel { background-color: #ffe0e0; }");
    } else {
        proportionalLabel->setText(proportionalLabel->text() + "\n(実際は固定ピッチではありません)");
        proportionalLabel->setStyleSheet("QLabel { background-color: #e0ffe0; }");
    }
    layout->addWidget(proportionalLabel);

    window.setWindowTitle("QFont::setFixedPitch() 例");
    window.show();

    return app.exec();
}

解説

  • QFontInfo::fixedPitch(): setFixedPitch(true) を呼び出した後でも、実際にフォントが固定ピッチとして使用されているかを確認するために重要です。これはQtのフォントマッチングの結果を反映します。
  • fixedFont.setFamily("Consolas");: 特定の固定ピッチフォントファミリーを指定しています。これは、システムにインストールされている必要があります。もし "Consolas" がない場合は、"Monospace" や "Courier New" などを試してみてください。"Monospace" はOSがデフォルトの等幅フォントにマッピングしてくれるため、クロスプラットフォームで比較的安定した選択肢です。
  • fixedFont.setFixedPitch(true);: これが最も重要な行です。このフォントを固定ピッチとして扱うようにQtにヒントを与えます。

QFontDatabase を利用して最適な固定ピッチフォントを取得する

QFontDatabase は、システムにインストールされているフォントに関する情報を提供します。これを使うと、より堅牢な方法で固定ピッチフォントを取得できます。

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QFontInfo>
#include <QFontDatabase> // QFontDatabase を使用するために必要
#include <QVBoxLayout>
#include <QWidget>

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

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

    QLabel *label = new QLabel(&window);
    label->setText("QFontDatabase から取得した固定ピッチフォント:\n"
                   "iiiiiiiiii WWWWWWWWWW\n"
                   "1234567890 1234567890");

    // QFontDatabase::standardFixedFont() を使用して、プラットフォームの標準的な固定ピッチフォントを取得
    QFont fixedFont = QFontDatabase::standardFixedFont();
    fixedFont.setPointSize(14); // サイズは自由に設定
    // standardFixedFont() は既に fixedPitch 属性が設定されていることが多いですが、
    // 念のため明示的に設定することもできます
    fixedFont.setFixedPitch(true);

    label->setFont(fixedFont);

    // 実際に固定ピッチであるか確認
    QFontInfo fontInfo(label->font());
    if (fontInfo.fixedPitch()) {
        label->setText(label->text() + "\n(実際に固定ピッチです: " + fontInfo.family() + ")");
        label->setStyleSheet("QLabel { background-color: #e0ffe0; }");
    } else {
        label->setText(label->text() + "\n(実際は固定ピッチではありません: " + fontInfo.family() + ")");
        label->setStyleSheet("QLabel { background-color: #ffe0e0; }");
    }
    layout->addWidget(label);

    window.setWindowTitle("QFontDatabase 例");
    window.show();

    return app.exec();
}

解説

  • フォントファミリーの表示: デバッグ情報として、実際にQtが選択したフォントのファミリー名を表示しています。これは、QFont::setFixedPitch() が実際にどのフォントに解決されたかを理解するのに役立ちます。
  • QFontDatabase::standardFixedFont(): この関数は、現在のプラットフォームで推奨される標準的な固定ピッチフォントを返します。これにより、特定のフォントファミリー名をハードコードする代わりに、よりOSに優しい選択が可能です。通常、このフォントはすでに fixedPitch プロパティが設定されています。

QTextEditQPlainTextEdit のようなテキストエディタでコードやログを表示する場合、固定ピッチフォントは非常に重要です。

#include <QApplication>
#include <QTextEdit>
#include <QFont>
#include <QFontDatabase>
#include <QVBoxLayout>
#include <QWidget>

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

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

    QTextEdit *textEdit = new QTextEdit(&window);
    textEdit->setPlainText("def greet(name):\n"
                           "    print(f\"Hello, {name}!\")\n\n"
                           "if __name__ == \"__main__\":\n"
                           "    greet(\"World\")\n"
                           "    # これらは同じ幅に見えるはずです:\n"
                           "    # iiiiiiiii\n"
                           "    # WWWWWWWWW\n"
                           "    # 123456789");

    QFont codeFont = QFontDatabase::standardFixedFont();
    codeFont.setPointSize(10);
    codeFont.setFixedPitch(true); // コード表示のため固定ピッチを強制
    textEdit->setFont(codeFont);

    layout->addWidget(textEdit);

    window.setWindowTitle("QTextEdit + Fixed Pitch");
    window.show();

    return app.exec();
}
  • この例では、QFontDatabase::standardFixedFont() を使用して、コード表示に最適なシステム提供の固定ピッチフォントを取得しています。これにより、ユーザーの環境に合わせた見やすいフォントが適用されます。
  • QTextEdit::setFont(codeFont);: QTextEditQWidget から継承されているため、setFont() メソッドを使用してフォントを設定できます。


QFont::setFixedPitch() の代替プログラミング方法 (Qt)

QFont::setFixedPitch() はフォントを固定ピッチとして「推奨」するための便利な関数ですが、Qtでは他の方法で固定ピッチフォントを確実に指定したり、フォントの選択をより細かく制御したりできます。

QFontDatabase::standardFixedFont() を使用する (最も推奨される代替)

これは、QFont::setFixedPitch(true) を単独で使うよりも、多くの場合で最も推奨される代替方法です。QFontDatabase::standardFixedFont() は、現在のプラットフォームで標準的な固定ピッチフォントを返します。これにより、OSの標準設定に適合し、ユーザーにとって最も自然な固定ピッチフォントが選択される可能性が高まります。

利点

  • 設定が容易
    非常にシンプルに固定ピッチフォントを取得できます。
  • 堅牢性
    setFixedPitch(true) が単なるヒントであるのに対し、この関数は「固定ピッチフォント」を返すことを保証しようとします。
  • クロスプラットフォーム対応
    各OSの標準的な固定ピッチフォントを自動的に選択します。

コード例

#include <QApplication>
#include <QLabel>
#include <QFont>
#include <QFontDatabase> // QFontDatabase を使用するために必要
#include <QVBoxLayout>
#include <QWidget>

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

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

    QLabel *label = new QLabel("このテキストは標準の固定ピッチフォントです:\n"
                               "iiiiiiiiii WWWWWWWWWW\n"
                               "1234567890 1234567890");

    // QFontDatabase::standardFixedFont() を使用してフォントを取得
    QFont fixedFont = QFontDatabase::standardFixedFont();
    fixedFont.setPointSize(12); // サイズを任意で設定
    label->setFont(fixedFont);

    layout->addWidget(label);

    window.setWindowTitle("Standard Fixed Font");
    window.show();

    return app.exec();
}

既知の固定ピッチフォントファミリーを明示的に指定する

もし特定の固定ピッチフォント(例: Courier New, Consolas, Source Code Pro, Cascadia Code)をアプリケーションで使用したい場合、QFont::setFamily() でその名前を直接指定します。

利点

  • 特定のデザインに合わせやすい
    アプリケーションのブランドイメージやデザインに合わせたフォントを使用できます。
  • 意図が明確
    アプリケーション開発者の意図するフォントを直接指定できます。

注意点

  • setFixedPitch(true) と組み合わせて使用することもありますが、主要なフォントファミリーが固定ピッチであれば、それだけで十分な場合が多いです。ただし、フォントファミリーがプロポーショナルなものでも、固定ピッチなバリアントが内部的に存在する可能性を考慮し、setFixedPitch(true) も併用すると、より確実に固定ピッチ版を選択するようQtに促すことができます。
  • ユーザーのシステムに存在しない可能性がある
    指定したフォントがユーザーのシステムにインストールされていない場合、Qtは代替のフォントを選択します。この代替フォントが固定ピッチでない可能性や、意図しないフォントになる可能性があります。

コード例

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

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

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

    QLabel *label = new QLabel("このテキストは指定された固定ピッチフォントです:\n"
                               "iiiiiiiiii WWWWWWWWWW\n"
                               "1234567890 1234567890");

    QFont specificFixedFont;
    // よく使われる固定ピッチフォントファミリーを指定
    // ユーザーのシステムにインストールされている必要があります。
    specificFixedFont.setFamily("Courier New"); // WindowsやmacOSでよく見られる
    // specificFixedFont.setFamily("Consolas"); // Windowsでよく見られる
    // specificFixedFont.setFamily("Source Code Pro"); // Adobe Fontsなどから
    // specificFixedFont.setFamily("JetBrains Mono"); // JetBrains IDEに同梱
    // specificFixedFont.setFamily("Monospace"); // 一般的な代替

    specificFixedFont.setPointSize(12);
    specificFixedFont.setFixedPitch(true); // 念のため固定ピッチであることをQtにヒントとして伝える
    label->setFont(specificFixedFont);

    layout->addWidget(label);

    window.setWindowTitle("Specific Fixed Font");
    window.show();

    return app.exec();
}

QFontDatabase を使ってシステム内の固定ピッチフォントを列挙・選択する

より高度な制御が必要な場合、QFontDatabase を使って、システムにインストールされているすべてのフォントファミリーを列挙し、その中から固定ピッチフォントをプログラム的に選択できます。これは、フォント選択ダイアログを作成する場合などに有用です。

利点

  • ユーザーへの選択肢提供
    フォント選択機能などで、ユーザーに利用可能な固定ピッチフォントを提示できます。
  • 完全な制御
    システムにあるフォントの中から、開発者が条件に基づいて最適なものを選べます。

コード例 (抜粋)

#include <QFontDatabase>
#include <QStringList>
#include <QDebug> // デバッグ出力用

// 利用可能な固定ピッチフォントファミリーを列挙する例
void listFixedPitchFonts() {
    QFontDatabase fontDb;
    QStringList families = fontDb.families();

    qDebug() << "利用可能な固定ピッチフォントファミリー:";
    for (const QString &family : families) {
        if (fontDb.isFixedPitch(family)) {
            qDebug() << "- " << family;
        }
    }
}

// アプリケーション起動時に呼び出すなど
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    listFixedPitchFonts(); // 出力を見て適切なフォントを選ぶ

    // ... その後、上記2の方法でフォントを設定 ...
    return app.exec();
}

解説

  • QFontDatabase::isFixedPitch(const QString &family): 指定されたフォントファミリーが固定ピッチである場合に true を返します。これを使って、固定ピッチフォントのみをフィルタリングできます。
  • QFontDatabase::families(): システムにインストールされているすべてのフォントファミリー名のリストを返します。

Qt スタイルシートを使用する (限定的だがシンプル)

Qt スタイルシートでもフォントを設定できますが、CSSには fixed-pitch のような直接的なプロパティは存在しません。代わりに、CSSの汎用フォントファミリー名である monospace を使用することで、システムが提供するデフォルトの固定ピッチフォントが適用されるようになります。

利点

  • シンプル
    複雑なコードを書く必要がありません。
  • 宣言的
    UIデザインとロジックを分離できます。

注意点

  • 制御の限界
    特定のフォントファミリーや詳細なフォントマッチングはできません。システムが monospace にマッピングするフォントに依存します。
#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>

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

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

    QLabel *label = new QLabel("このテキストはスタイルシートで設定された固定ピッチフォントです:\n"
                               "iiiiiiiiii WWWWWWWWWW\n"
                               "1234567890 1234567890");

    // スタイルシートでフォントを設定
    // "monospace" はOSのデフォルトの等幅フォントに解決されます。
    label->setStyleSheet("QLabel { font-family: monospace; font-size: 12pt; }");

    layout->addWidget(label);

    window.setWindowTitle("Stylesheet Fixed Pitch");
    window.show();

    return app.exec();
}
  • シンプルなプログラミング用途や、システムのデフォルトで十分な場合は、スタイルシートの font-family: monospace; も検討できます。
  • 特定の既知の固定ピッチフォントを使用したいが、システムに存在しない場合の代替も考慮するなら、setFamily()setFixedPitch(true) の組み合わせ、あるいは QFontDatabase を使ったカスタム選択が考えられます。
  • 最も推奨されるのは QFontDatabase::standardFixedFont() です。クロスプラットフォームで安定した結果を期待できます。