電卓フォーム/複数継承

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

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

calculatorform.ui ファイルをサブクラス化し、qmakeuic で処理するようにするには、calculatorform.ui.pro ファイルに含める必要があります:

QT += widgets

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

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

電卓フォームの定義

CalculatorForm の定義には、先ほど生成されたui_calculatorform.h を含めます。

#include "ui_calculatorform.h"

前述のように、このクラスはQWidgetUi::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 の自動接続機能によって、関係するすべての信号とスロットが自動的に接続されるようにするためです。

電卓フォームの実装

コンストラクタでは、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() 関数はQApplicationCalculatorForm をインスタンス化します。calculator オブジェクトはshow() 関数を呼び出すことで表示されます。

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

アプリケーションにフォームを組み込むには、さまざまなアプローチがあります。マルチプル継承はその 1 つです。その他のアプローチについては、「アプリケーションでデザイナーUIファイルを使用する」を参照してください。

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

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は各所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。