このページでは

計算機フォーム/多重継承

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

「多重継承の例」では、 Qt Widgets Designer で作成されたフォームを、QWidget とユーザーインターフェースクラスであるUi::CalculatorForm の両方をサブクラス化することで、アプリケーション内で使用する方法を示しています。

calculatorform.ui ファイルをサブクラス化し、qmake がuic を使用してそれを確実に処理するようにするには、以下に示すように、.pro ファイルにcalculatorform.ui をインクルードする必要があります。

QT += widgets

HEADERS = calculatorform.h
SOURCES = calculatorform.cpp main.cpp
FORMS = calculatorform.ui

プロジェクトがコンパイルされると、uic によって対応するui_calculatorform.h が生成されます。

CalculatorForm の定義

CalculatorForm の定義では、先ほど生成されたui_calculatorform.h をインクルードします。

#include "ui_calculatorform.h"

前述の通り、このクラスはQWidget とUi::CalculatorForm の両方のサブクラスです。

class CalculatorForm : public QWidget, private Ui::CalculatorForm
{
    Q_OBJECT

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

private slots:
    void on_inputSpinBox1_valueChanged(int value);
    void on_inputSpinBox2_valueChanged(int value);
};

uic で要求される自動接続の命名規則に従って、2つのスロットが定義されています。これは、QMetaObject の自動接続機能によって、関連するすべてのシグナルとスロットが自動的に接続されるようにするためです。

CalculatorForm の実装

コンストラクタ内で、setupUi() を呼び出してユーザーインターフェースファイルをロードします。なお、setupUiはUi::CalculatorForm のメソッドであることに注意してください。

CalculatorForm::CalculatorForm(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
}

on_inputSpinBox1_valueChanged() とon_inputSpinBox2_valueChanged() の2つのスロットを実装します。これらのスロットは、両方のスピンボックスが発信するvalueChanged() シグナルに応答します。いずれかのスピンボックスの値が変更されるたびに、その値を取得し、もう一方のスピンボックスの値に加算します。

void CalculatorForm::on_inputSpinBox1_valueChanged(int value)
{
    outputWidget->setText(QString::number(value + inputSpinBox2->value()));
}

void CalculatorForm::on_inputSpinBox2_valueChanged(int value)
{
    outputWidget->setText(QString::number(value + inputSpinBox1->value()));
}

main() 関数

main() 関数は、QApplication およびCalculatorForm をインスタンス化します。calculator オブジェクトは、show()関数を呼び出すことで表示されます。

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    CalculatorForm calculator;
    calculator.show();
    return app.exec();
}

アプリケーションにフォームを組み込むには、さまざまな方法があります。「多重継承」によるアプローチは、そのうちの1つにすぎません。利用可能な他のアプローチの詳細については、「アプリケーションでのQt Widgets Designer UIファイルの使用」を参照してください。

サンプルプロジェクト @ 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.