計算機ビルダー
実行時に「Qt Widgets Designer 」フォームからユーザーインターフェースを作成する。

「電卓フォーム」の例で作成したフォームを使用して、アプリケーションの実行時に同じユーザーインターフェースを生成することも、アプリケーションのビルド時に定義することも可能であることを示します。
準備
「Calculator Form」のサンプルでは、修正なしでそのまま使用できるユーザーインターフェースが定義されています。このサンプルでは、前のサンプルで作成したcalculatorform.ui ファイルをリソースファイルに格納していますが、代わりにディスク上に保存することも可能です。
実行時にフォームを生成するには、このサンプルを「QtUiTools 」モジュールライブラリにリンクする必要があります。使用するプロジェクトファイルには、これを行うために必要なすべての情報が含まれています:
target_link_libraries(calculatorbuilder PRIVATE
Qt6::UiTools
Qt6::Widgets
)UIファイルはリソースから読み込まれます:
qt_add_resources(calculatorbuilder "calculatorbuilder"
PREFIX
"/forms"
FILES
"calculatorform.ui"
)qmake については:
RESOURCES = calculatorbuilder.qrc
SOURCES = main.cpp
QT += widgets uitoolsその他必要なファイルはすべて、通常通り宣言されています。
Calculatorフォームの読み込み
libQtUiTools ライブラリが提供するQUiLoader クラスを使用する必要があるため、まずそのクラスのヘッダーファイルがインクルードされていることを確認します:
#include <QUiLoader>トップレベルウィジェットを作成し、QFile オブジェクトを介して例の資源から取得したユーザーインターフェースを読み込む静的ヘルパー関数を作成します:
static QWidget *loadCalculatorForm(QWidget *parent = nullptr)
{
QFile file(u":/forms/calculatorform.ui"_s);
if (!file.open(QFile::ReadOnly))
return nullptr;
QWidget *formWidget = QUiLoader().load(&file, parent);
if (!formWidget)
return nullptr;ユーザーインターフェースを例のリソースに含めることで、例が実行された際に確実に利用できるようになります。QUiLoader::load() 関数は、ファイルに含まれるユーザーインターフェースの記述を受け取り、CalculatorForm の子ウィジェットとしてフォームウィジェットを構築します。
生成されたユーザーインターフェースには、2つのスピンボックスと1つのラベルという3つのウィジェットが含まれています。便宜上、FormBuilder によって構築されたウィジェットからこれらのウィジェットへのポインタを取得し、後で使用するために記録しておきます。findChild() テンプレート関数を使用すると、名前付きの子ウィジェットを見つけるためにウィジェットを照会することができます。
auto *inputSpinBox1 = formWidget->findChild<QSpinBox*>(u"inputSpinBox1"_s);
auto *inputSpinBox2 = formWidget->findChild<QSpinBox*>(u"inputSpinBox2"_s);
auto *outputWidget = formWidget->findChild<QLabel*>(u"outputWidget"_s);フォームによって提供される出力ウィジェットを変更するスロットは、「電卓フォーム」の例と同様の方法で定義されますが、見つかったウィジェットをキャプチャするラムダ式を使用するという点が異なります:
auto updateResult = [inputSpinBox1, inputSpinBox2, outputWidget]()
{
const int sum = inputSpinBox1->value() + inputSpinBox2->value();
outputWidget->setText(QString::number(sum));
};
QObject::connect(inputSpinBox1, &QSpinBox::valueChanged, formWidget, updateResult);
QObject::connect(inputSpinBox2, &QSpinBox::valueChanged, formWidget, updateResult);フォームウィジェットはレイアウトに追加され、ウィンドウのタイトルが設定されます:
auto *layout = new QVBoxLayout(&w);
layout->addWidget(formWidget);
w.setWindowTitle(QCoreApplication::translate("CalculatorForm",
"Calculator Builder"));このアプローチの利点は、アプリケーションの実行時にフォームを置き換えることができる一方で、適切な名前が付けられている限り、フォームに含まれるウィジェットを操作し続けられることです。
ただし、実行時にフォームを読み込むことは、User Interface Compiler (uic)ツールを使用してC++コードに変換する場合と比較して、実行時のオーバーヘッドが発生します。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.