このページでは

計算機フォーム

Qt Widgets Designer で作成したフォームをアプリケーションで使用する。

「電卓フォームの例」では、QWidget のサブクラスからユーザーインターフェース情報を取得することで、Qt Widgets Designer で作成されたフォームをアプリケーション内で使用する方法について説明しています。

「電卓フォーム」の例のスクリーンショット

このサンプルでは、整数値を入力するための 2 つのスピンボックスと、それらの合計値を表示するラベルが提示されています。いずれかのスピンボックスが更新されるたびに、ウィジェットとフォーム間のシグナル・スロット接続によって、ラベルも確実に更新されます。

準備

この例のユーザーインターフェースは、Qt Widgets Designer を使用して完全に設計されています。その結果、フォーム、使用されるウィジェット、それら間のシグナル・スロット接続、およびその他の標準的なユーザーインターフェースのプロパティを記述した UI ファイルが生成されます。

この例でこのファイルを使用できるようにするには、CMAKE_AUTOUIC 機能を有効にし、ソースファイルにUIファイルを指定する必要があります。

set(CMAKE_AUTOUIC ON)

qt_add_executable(calculatorform
    calculatorform.cpp calculatorform.h calculatorform.ui
    main.cpp
)

qmake を使用するには、例のプロジェクトファイルに `FORMS ` 宣言を含める必要があります:

FORMS       = calculatorform.ui

プロジェクトのビルド時に、uic によって、フォームを構築するためのヘッダーファイルが生成されます。

CalculatorFormクラスの定義

CalculatorForm クラスは、calculatorform.ui ファイルで記述されたユーザーインターフェースを使用します。フォームとその内容にアクセスするには、ビルドプロセス中にuic によって生成されたui_calculatorform.h ヘッダーファイルをインクルードする必要があります:

#include "ui_calculatorform.h"

フォーム自体がQWidget に基づいているため、QWidget をサブクラス化してCalculatorForm クラスを定義します:

class CalculatorForm : public QWidget
{
    Q_OBJECT

public:
    explicit CalculatorForm(QWidget *parent = nullptr);

private slots:
    void updateResult();

private:
    Ui::CalculatorForm ui;
};

コンストラクタとは別に、このクラスには計算を実行し、それに応じて出力ウィジェットを更新するプライベートスロット `updateResult() ` が含まれています。プライベートメンバー変数 `ui ` はフォームを参照しており、ユーザーインターフェースの内容にアクセスするために使用されます。

CalculatorForm クラスの実装

コンストラクタは、単に基底クラスのコンストラクタを呼び出し、フォームのユーザーインターフェースを設定し、シグナル `QSpinBox::valueChanged()` をスロット `updateResult()` に接続するだけです。

CalculatorForm::CalculatorForm(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    connect(ui.inputSpinBox1, &QSpinBox::valueChanged, this, &CalculatorForm::updateResult);
    connect(ui.inputSpinBox2, &QSpinBox::valueChanged, this, &CalculatorForm::updateResult);
}

ユーザーインターフェースは、setupUI() 関数によって設定されます。この関数の引数としてthis を渡すことで、CalculatorForm ウィジェット自体をユーザーインターフェースのコンテナとして使用します。

スロット `updateResult() ` は値を加算し、その結果を出力ウィジェットに設定します:

void CalculatorForm::updateResult()
{
    const int sum = ui.inputSpinBox1->value() + ui.inputSpinBox2->value();
    ui.outputWidget->setText(QString::number(sum));
}

これは、いずれかのスピンボックスの値が変更されるたびに呼び出されます。

サンプルプロジェクト @ code.qt.io

© 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.