QFont::styleStrategy()
この関数は、QFont::StyleStrategy
という列挙型を返します。この列挙型には、以下のような値があります。
- QFont::NoFontMerging
フォントのマージを無効にします。これは、複数のフォントを組み合わせて1つのテキスト表示を生成する際に、Qtが異なるフォントのグリフ(文字の図形)を混在させるのを防ぎます。特定のフォントセットのみを使用したい場合に有用です。 - QFont::PreferOutline
アウトラインフォント(スケーラブルなフォント)を優先します。ビットマップフォントよりも滑らかに拡大縮小できるため、より柔軟な表示が可能です。 - QFont::PreferQuality
可能な限り高品質なフォントレンダリングを優先します。これには、より高度なアンチエイリアシングやヒンティング(フォントの形状を調整する技術)が含まれる場合があります。 - QFont::PreferMatch
要求されたフォントに最も近いフォントを厳密に一致させようとします。もし完全に一致するフォントがない場合、見た目が異なるフォントが選択される可能性があります。 - QFont::NoSubpixelAntialias
サブピクセルアンチエイリアシングを無効にします。通常のアンチエイリアシングは有効ですが、サブピクセルレンダリングによるカラーフリンジ(色のにじみ)を避けるために使用されます。 - QFont::ForceIntegerMetrics
フォントのメトリクス(文字の幅や高さなど)を整数値に強制します。これにより、テキストの配置がより予測可能になりますが、文字間隔が不自然になることがあります。 - QFont::PreferAntialias
可能であれば、アンチエイリアシングを優先します。テキストを滑らかに表示し、現代のディスプレイで読みやすくします。 - QFont::NoAntialias
アンチエイリアシングを無効にします。フォントのエッジがギザギザになりますが、非常に小さなフォントや特定のピクセルパーフェクトな表示が必要な場合に有用です。 - QFont::PreferDefault (デフォルト)
これが最も一般的な戦略です。Qtがシステムやプラットフォームのデフォルトのフォント解決戦略に依存します。多くの場合、これは最適な結果をもたらします。
QFont::styleStrategy()
は、アプリケーションが様々な環境で一貫したテキスト表示を提供するために重要です。例えば、ユーザーのシステムに特定のフォントがインストールされていない場合でも、styleStrategy()
の設定によって、Qtは代替フォントを適切に選択し、テキストの可読性や見た目を維持しようとします。
開発者は、QFont::setStyleStrategy()
関数を使用して、このフォント解決戦略を設定することができます。例えば、次のように使用します。
QFont font;
font.setFamily("Meiryo UI"); // 例としてメイリオ UI フォントを設定
font.setStyleStrategy(QFont::PreferAntialias); // アンチエイリアシングを優先する
// このフォントをウィジェットに適用するなど
myWidget->setFont(font);
フォントが期待通りに表示されない(ギザギザ、ぼやけ、文字化けなど)
原因
- プラットフォーム固有の挙動
フォントのレンダリングは、OSやグラフィックドライバに大きく依存します。WindowsのDirectWrite、macOSのフォントレンダリング、LinuxのFontconfigなど、プラットフォームごとの差異が問題を引き起こすことがあります。 - フォントのヒンティングの問題
QFont::ForceIntegerMetrics
のような設定は、フォントのメトリクスを整数に強制することで、文字間隔が不自然になったり、ヒンティングが適切に適用されなかったりする可能性があります。 - フォントの代替(フォールバック)の問題
指定したフォントに特定の文字のグリフ(文字の図形)がない場合、Qtは代替フォント(フォールバックフォント)を探して表示しようとします。この代替処理がうまくいかないと、四角い豆腐のような文字(通称「豆腐」)が表示されたり、意図しないフォントで表示されたりします。 - アンチエイリアシングの問題
QFont::NoAntialias
が設定されている場合、フォントはギザギザになります。逆に、PreferAntialias
が期待通りに機能しない場合、ぼやけて見えることがあります。特にQt6以降、高DPIスケーリングがデフォルトで有効になっている場合、アンチエイリアシングの挙動がQt5とは異なることがあります。
トラブルシューティング
- フォントファイル自体の問題
フォントファイルが破損している、または必要なグリフが含まれていない場合も、表示の問題が発生します。他のアプリケーションで同じフォントが正しく表示されるか確認してください。 - プラットフォーム固有の対応
- Windows
DirectWrite関連の問題であれば、your_application.exe -platform windows:nodirectwrite
のようにコマンドライン引数でDirectWriteを無効にしてみるのも一つの手です。 - macOS
システム環境設定のフォントスムージング設定を確認したり、Qtのバージョンアップで改善されることがあります。 - Linux
Fontconfigの設定が影響する場合があります。
- Windows
- QFont::NoFontMerging の影響
特定の文字が豆腐になる場合、QFont::NoFontMerging
が設定されている可能性があります。これは、Qtが自動的に代替フォントを探すのを防ぐため、文字が欠落して表示されることがあります。フォールバックが必要な場合はこの設定を無効にします。 - 代替フォントの確認
QFontInfo
クラスを使用して、実際に使用されているフォントの情報を取得し、それが意図したフォントであるか、または適切に代替されているかを確認します。 - 高DPIスケーリングとの関連
Qt6でアンチエイリアシングが効かない場合、高DPIスケーリングが原因である可能性があります。環境変数QT_ENABLE_HIGHDPI_SCALING
を0
に設定して試したり、QFont::setHintingPreference(QFont::HintingPreference::PreferFullHinting)
のようなヒンティング設定を調整したりすることで解決する場合があります。 - QFont::PreferQuality を試す
これは、より高度なレンダリング品質を優先するため、見た目が改善される場合があります。 - QFont::NoAntialias を確認する
もし意図せずギザギザのフォントが表示されている場合、この設定が有効になっていないか確認してください。 - QFont::PreferAntialias を試す
ほとんどの場合、これが最も望ましい結果をもたらします。アンチエイリアシングを有効にすることで、テキストが滑らかに表示されます。
特定の文字が表示されない(豆腐になる)
原因
- QFont::NoFontMerging の誤用
上記の通り、この戦略はフォントのマージ(代替フォントによるグリフ補完)を無効にするため、グリフが欠落していると豆腐になります。 - フォントのグリフ不足
指定したフォントに、表示しようとしている特定の文字(特に多言語の文字や特殊記号)のグリフが含まれていない場合。
トラブルシューティング
- QFontDatabase の利用
QFontDatabase
を使用して、特定の文字をサポートするフォントをプログラムで検索し、それをQFont
に設定することも可能です。 - 複数のフォントの指定
QFont::setFamily()
に複数のフォント名をカンマ区切りで指定することで、優先順位を付けて代替フォントを試させることができます。 - QFont::NoFontMerging を設定しない(または削除する)
これにより、Qtは不足しているグリフを他の利用可能なフォントから補完しようとします。
パフォーマンスの問題
原因
- フォントのロード
多くの異なるフォントや大きなフォントファイルを頻繁にロードすると、パフォーマンスに影響を与える可能性があります。 - 複雑なフォントのレンダリング
高度なアンチエイリアシングやヒンティングは、レンダリングにCPU/GPUリソースを多く消費する可能性があります。
トラブルシューティング
- フォントキャッシュの活用
Qtは内部でフォントをキャッシュしますが、アプリケーションの設計によっては、不必要なフォントの再生成を避けるように心がけることが重要です。 - 必要最低限のスタイル戦略に絞る
不要な戦略(例:ForceIntegerMetrics
など)は避けることで、オーバーヘッドを減らせます。 - QFont::PreferDefault を使用する
ほとんどの環境で最適化されたデフォルトの挙動に任せるのが最もパフォーマンスが良い場合があります。
原因
- システムフォントの優先順位
システムにインストールされているフォントと、Qtが利用可能なフォントの間の優先順位が問題を引き起こすことがあります。 - フォント名の曖昧さ
"Helvetica" のように、複数のフォントファウンドリ(製造元)から提供されているフォント名を指定した場合、Qtがどのバージョンのフォントを選択するかは、プラットフォームや設定に依存します。 - QFont::StyleHint との組み合わせ
QFont::styleStrategy()
はQFont::styleHint()
と組み合わせてフォントマッチングに影響を与えます。これらが意図しない組み合わせになっていると、予期せぬフォントが選択されることがあります。
- QFontDatabase::addApplicationFont() を使用する
アプリケーションに特定のフォントをバンドルし、確実に使用させたい場合は、この関数でフォントを登録します。 - ファウンドリ名を明示する
例えば "Helvetica [Cronyx]" のようにファウンドリ名を指定することで、特定のフォントを厳密に選択できる場合があります。 - QFontInfo で実際のフォントを確認する
常にQFontInfo(myFont).family()
などを使用して、Qtが実際に選択したフォントが何かを確認します。
これらの例は、Qt GUIアプリケーションのメインウィンドウやカスタムウィジェット内で使用することを想定しています。
基本的な使い方: QFont::setStyleStrategy()
QFont::styleStrategy()
を使用する最も基本的な方法は、QFont
オブジェクトを作成し、その後に目的の戦略を設定することです。
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtGui/QFont>
#include <QtWidgets/QVBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
// デフォルトのフォント戦略
QLabel *labelDefault = new QLabel("デフォルトのフォント戦略 (PreferDefault)");
QFont fontDefault("Arial", 20); // フォントファミリーとサイズを設定
// setStyleStrategy() を呼び出さない場合、PreferDefault が適用される
labelDefault->setFont(fontDefault);
layout->addWidget(labelDefault);
// アンチエイリアシングを優先する戦略
QLabel *labelAntialias = new QLabel("アンチエイリアシングを優先 (PreferAntialias)");
QFont fontAntialias("Arial", 20);
fontAntialias.setStyleStrategy(QFont::PreferAntialias); // アンチエイリアシングを有効にする
labelAntialias->setFont(fontAntialias);
layout->addWidget(labelAntialias);
// アンチエイリアシングを無効にする戦略 (ギザギザになる可能性あり)
QLabel *labelNoAntialias = new QLabel("アンチエイリアシングを無効 (NoAntialias)");
QFont fontNoAntialias("Arial", 20);
fontNoAntialias.setStyleStrategy(QFont::NoAntialias); // アンチエイリアシングを無効にする
labelNoAntialias->setFont(fontNoAntialias);
layout->addWidget(labelNoAntialias);
window.setWindowTitle("QFont::styleStrategy() の例");
window.show();
return a.exec();
}
解説
QFont::NoAntialias
: アンチエイリアシングを完全に無効にします。テキストの端がギザギザになりますが、ピクセルパーフェクトなレンダリングが求められる場合や、パフォーマンスが非常に重要な場合に検討されることがあります。QFont::PreferAntialias
: フォントを滑らかに表示するために、可能な限りアンチエイリアシングを使用しようとします。現代のアプリケーションではこれが推奨されることが多いです。QFont::PreferDefault
: この戦略は、プラットフォームのデフォルト設定に従います。多くの場合は、アンチエイリアシングが有効になります。
QFont::NoFontMerging
は、指定されたフォントに文字がない場合に、Qtが自動的に代替フォントを探す挙動を無効にします。
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtGui/QFont>
#include <QtWidgets/QVBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
// 存在しないフォントで、デフォルトのフォントマージ
QLabel *labelDefaultMerge = new QLabel("存在しないフォント (存在しない漢字: 𠮷)");
QFont fontDefaultMerge("NonExistentFontFamily", 30); // 存在しないフォント名を指定
// デフォルトでは、𠮷(よし)という文字は他のフォントで表示されるはず
labelDefaultMerge->setFont(fontDefaultMerge);
layout->addWidget(labelDefaultMerge);
// 存在しないフォントで、フォントマージを無効にする
QLabel *labelNoFontMerging = new QLabel("フォントマージ無効 (存在しない漢字: 𠮷)");
QFont fontNoFontMerging("NonExistentFontFamily", 30);
fontNoFontMerging.setStyleStrategy(QFont::NoFontMerging); // フォントマージを無効に
// 𠮷(よし)が表示されないか、四角い豆腐になる可能性が高い
labelNoFontMerging->setFont(fontNoFontMerging);
layout->addWidget(labelNoFontMerging);
// 明示的にフォントを指定し、一部の文字を別のフォントで表示する例
// (これはstyleStrategyとは直接関係ありませんが、フォールバックの概念を示すため)
QLabel *labelExplicitFallback = new QLabel("明示的なフォールバック (日本語: あいう, 漢字: 𠮷)");
// 複数のフォント名をカンマ区切りで指定すると、左から優先的に使用される
QFont fontExplicitFallback("Meiryo UI, Noto Color Emoji", 20);
fontExplicitFallback.setStyleStrategy(QFont::PreferAntialias);
labelExplicitFallback->setFont(fontExplicitFallback);
layout->addWidget(labelExplicitFallback);
window.setWindowTitle("QFont::NoFontMerging の例");
window.show();
return a.exec();
}
解説
- 複数のフォントファミリーの指定:
setFamily("Font1, Font2, Font3")
のようにカンマ区切りで複数のフォントファミリーを指定すると、Qtは指定された順序でフォントを試行し、最初に見つかった利用可能なフォントを使用します。これはNoFontMerging
とは異なり、フォールバックの挙動をある程度制御できます。 QFont::NoFontMerging
: この戦略を設定すると、Qtは指定されたフォントに文字が含まれていない場合でも、自動的に代替フォントを探すことをしません。結果として、その文字は表示されないか、四角いボックス(いわゆる「豆腐」)として表示されます。これは、厳密に特定のフォントのみを使用したい場合に役立ちますが、通常は推奨されません。
いくつかの戦略は組み合わせて使用することもできます(ビットフラグとして定義されているため)。
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtGui/QFont>
#include <QtWidgets/QVBoxLayout>
#include <QtGui/QFontInfo> // フォント情報を取得するために必要
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
// アウトラインフォントを強制し、アンチエイリアシングを優先
QLabel *labelOutlineAntialias = new QLabel("アウトライン強制 & アンチエイリアシング優先 (Arial)");
QFont fontOutlineAntialias("Arial", 20);
fontOutlineAntialias.setStyleStrategy(QFont::ForceOutline | QFont::PreferAntialias);
labelOutlineAntialias->setFont(fontOutlineAntialias);
layout->addWidget(labelOutlineAntialias);
// ビットマップフォントを優先(X11などの一部の環境で効果あり)
QLabel *labelPreferBitmap = new QLabel("ビットマップフォントを優先 (古い環境で効果あり)");
QFont fontPreferBitmap("Fixed", 20); // 固定幅フォントで試す
fontPreferBitmap.setStyleStrategy(QFont::PreferBitmap);
labelPreferBitmap->setFont(fontPreferBitmap);
layout->addWidget(labelPreferBitmap);
// フォント情報を表示するラベル
QLabel *infoLabel = new QLabel();
layout->addWidget(infoLabel);
// 設定されたフォント情報を表示
QFontInfo fontInfo(fontOutlineAntialias);
infoLabel->setText(QString("「アウトライン強制」の実際のフォントファミリー: %1\n").arg(fontInfo.family()) +
QString("「アウトライン強制」のアンチエイリアシング: %1").arg(fontInfo.antiAliased() ? "有効" : "無効"));
window.setWindowTitle("QFont::styleStrategy() その他の例");
window.show();
return a.exec();
}
- ビットフラグによる組み合わせ:
|
(OR演算子) を使用して複数のStyleStrategy
を組み合わせることができます。これにより、複数の挙動を同時に指定できます。 QFont::PreferBitmap
: 可能な場合、ビットマップフォントの使用を優先します。これは、特に古いシステムや特定の環境で、ビットマップフォントがより鮮明に見える場合に役立つことがあります。ただし、スケーラビリティに制限があります。QFont::ForceOutline
: ビットマップフォントではなく、スケーラブルなアウトラインフォントの使用を強制します。これにより、拡大・縮小してもフォントが滑らかに表示されます。
QApplication::setFont() および QWidget::setFont()
アプリケーション全体または特定のウィジェットのデフォルトフォントを設定する最も一般的な方法です。QFont::styleStrategy()
を設定しない場合、これらの設定は通常QFont::PreferDefault
の戦略でレンダリングされます。
メリット
- 多くの場合はデフォルトの戦略で十分な品質を提供します。
- アプリケーション全体またはウィジェット階層全体に一貫したフォントスタイルを簡単に適用できます。
デメリット
- 特定の文字の代替フォント選択など、複雑なフォールバック挙動の制御はできません。
styleStrategy
のような詳細なレンダリング制御はできません。
コード例
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtWidgets/QVBoxLayout>
#include <QtGui/QFont>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// アプリケーション全体のデフォルトフォントを設定
QFont defaultAppFont("Arial", 12);
a.setFont(defaultAppFont);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QLabel *label1 = new QLabel("アプリケーションのデフォルトフォント");
layout->addWidget(label1); // このラベルはdefaultAppFontを使用
QLabel *label2 = new QLabel("特定のウィジェットのフォント");
QFont specificWidgetFont("Times New Roman", 16);
label2->setFont(specificWidgetFont); // このラベルは独自のフォントを使用
layout->addWidget(label2);
window.setWindowTitle("setFont() の例");
window.show();
return a.exec();
}
QFontDatabase を使用したフォントの管理
QFontDatabase
は、システムにインストールされているフォントや、アプリケーションにバンドルされたカスタムフォントを管理するためのクラスです。QFont::styleStrategy()
はレンダリングの「戦略」を扱いますが、QFontDatabase
は利用可能なフォントそのものや、そのバリエーション(太さ、スタイル)を「見つける」のに役立ちます。
メリット
- フォントの太さ、スタイル、ピッチなど、より詳細なフォントプロパティに基づいてフォントをクエリできます。
- アプリケーションにカスタムフォントをバンドルし、確実に使用させることができます。
- 特定の文字をサポートするフォントをプログラムで検索できます。
デメリット
- フォントのレンダリング戦略を直接制御するものではありません。
コード例
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtWidgets/QVBoxLayout>
#include <QtGui/QFontDatabase> // QFontDatabase を使用するために必要
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QLabel *label = new QLabel("システムにインストールされているフォントの検索と使用");
layout->addWidget(label);
// QFontDatabase を使用して、特定の言語(日本語)をサポートするフォントを探す
// QFont::styleStrategy() は直接制御しないが、これにより適切なフォントを見つけられる
QStringList japaneseFonts = QFontDatabase::families(QFontDatabase::Japanese);
if (!japaneseFonts.isEmpty()) {
QFont font(japaneseFonts.first(), 18);
label->setFont(font);
label->setText(label->text() + QString("\n使用フォント: %1\n日本語: あいう漢字").arg(japaneseFonts.first()));
} else {
label->setText(label->text() + "\n日本語フォントが見つかりませんでした。");
}
// アプリケーションにカスタムフォントを追加する例(実際のファイルパスが必要)
// int fontId = QFontDatabase::addApplicationFont(":/fonts/MyCustomFont.ttf");
// if (fontId != -1) {
// QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
// if (!fontFamilies.isEmpty()) {
// QLabel *customFontLabel = new QLabel(QString("カスタムフォント: %1").arg(fontFamilies.first()));
// QFont customFont(fontFamilies.first(), 15);
// customFontLabel->setFont(customFont);
// layout->addWidget(customFontLabel);
// }
// }
window.setWindowTitle("QFontDatabase の例");
window.show();
return a.exec();
}
QStyleSheet を使用したフォントのスタイル設定
Qtのスタイルシートは、CSSのような構文でウィジェットの見た目をカスタマイズするための強力な方法です。フォントの設定も可能です。
メリット
- 複数のウィジェットに同じフォントスタイルを適用するのに便利です。
- テーマの変更や動的なスタイル調整が容易になります。
- UIの見た目をプログラムロジックから分離し、管理しやすくします。
デメリット
QFont::styleStrategy()
で提供されるような低レベルのフォントレンダリング戦略の直接制御はできません。スタイルシートで設定されたフォントも、内部的にはQtのデフォルト戦略や設定された戦略に従ってレンダリングされます。
コード例
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QVBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QLabel *label1 = new QLabel("スタイルシートで設定されたフォント (Verdana, 18px)");
// スタイルシートでフォントを設定
label1->setStyleSheet("QLabel { font-family: Verdana; font-size: 18px; font-weight: bold; color: blue; }");
layout->addWidget(label1);
QPushButton *button = new QPushButton("ボタンのフォント (Courier New, 14px)");
button->setStyleSheet("QPushButton { font-family: 'Courier New'; font-size: 14px; color: green; }");
layout->addWidget(button);
window.setWindowTitle("QStyleSheet の例");
window.show();
return a.exec();
}
Qtアプリケーションのフォントレンダリングは、環境変数やQApplication::setAttribute()
によって提供されるグローバルなヒントによっても影響を受けることがあります。これらはQFont::styleStrategy()
よりも広範な影響を持つことがあります。
メリット
- 特に高DPIディスプレイでのスケーリングやアンチエイリアシングの問題解決に役立つことがあります。
- アプリケーション全体のグラフィカルな挙動を制御できます。
デメリット
- 環境変数を使用する場合、アプリケーションの外部で設定する必要があるため、配布時に考慮が必要です。
- 特定のフォントインスタンスのレンダリング戦略を個別に制御するものではありません。
主な属性・環境変数
QT_QPA_PLATFORM
(例:windows:nodirectwrite
): 特定のプラットフォーム固有のレンダリングバックエンドを無効にすることで、フォントレンダリングの問題を回避できる場合があります(WindowsのDirectWriteなど)。QT_SCALE_FACTOR
: アプリケーション全体のUI要素のスケールファクターを設定します。フォントサイズもこれに応じてスケーリングされます。QT_FONT_DPI
: フォントレンダリングに使用されるDPIを強制的に設定します。これにより、フォントの物理的なサイズ感を調整できます。Qt::AA_DisableWindowContexts
: 特定のレンダリング問題を解決するために使用されることがありますが、通常の使用では不要です。Qt::AA_UseHighDpiPixmaps
/QT_ENABLE_HIGHDPI_SCALING
: 高DPIディスプレイでのピックスマップやアイコンのスケーリングを制御します。フォントのレンダリングに直接影響はしませんが、全体的なUIの鮮明さに貢献します。
コード例 (QApplication::setAttribute の一部)
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QLabel>
#include <QtWidgets/QVBoxLayout>
int main(int argc, char *argv[])
{
// 高DPIピックスマップの使用を有効にする (Qt5以降で特に有効)
// フォントレンダリングに直接影響しないが、UI全体の鮮明さに影響
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
QApplication a(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QLabel *label = new QLabel("QApplication::setAttribute の例");
layout->addWidget(label);
window.setWindowTitle("QApplication::setAttribute の例");
window.show();
return a.exec();
}
QFont::styleStrategy()
はフォントのレンダリング戦略を細かく制御するためのものです。しかし、フォントの見た目や挙動に影響を与えるプログラミング方法は多岐にわたります。
- グローバルなレンダリング調整
QApplication::setAttribute()
や環境変数 - 見た目の統一性
QStyleSheet
- フォントの検索と利用
QFontDatabase
- 簡単なフォント設定
QApplication::setFont()
やQWidget::setFont()