電卓フォーム

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

Calculator Form Example では、Qt Widgets Designer で作成したフォームをアプリケーションで使用する方法を、QWidget のサブクラスからユーザーインターフェイス情報を使用して示しています。

Screenshot of the Calculator Form example

この例では、整数値の入力に使用する 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));
}

スピンボックスの1つの値が変わるたびに呼び出されます。

プロジェクト例 @ code.qt.io

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