電卓フォーム/複数継承
Qt Widgets Designer で作成したフォームをアプリケーションで使用する。
多重継承の例では、Qt Widgets Designerで作成されたフォームを、QWidget とユーザーインターフェイスクラス(Ui::CalculatorForm
)の両方をサブクラス化することで、アプリケーションで使用する方法を示します。
calculatorform.ui
ファイルをサブクラス化し、qmake
がuic
で処理するようにするには、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"
前述のように、このクラスは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 の自動接続機能によって、関係するすべての信号とスロットが自動的に接続されるようにするためです。
電卓フォームの実装
コンストラクタでは、setupUi()
を呼び出してユーザー・インターフェース・ファイルをロードします。setupUi はUi::CalculatorForm
のメソッドであることに注意してください。
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 つです。その他のアプローチについては、「アプリケーションでデザイナーUIファイルを使用する」を参照してください。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は各所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。