Using a form created with Qt Designer in an application.
The Multiple Inheritance Example shows how to use a form created with
Qt Designer
in an application by subclassing both
QWidget
and the user interface class, which is
Ui::CalculatorForm
.
To subclass the
calculatorform.ui
file and ensure that
qmake
processes it with the
uic
, we have to include
calculatorform.ui
在
.pro
file, as shown below:
QT += widgets HEADERS = calculatorform.h SOURCES = calculatorform.cpp main.cpp FORMS = calculatorform.ui
When the project is compiled, the
uic
will generate a corresponding
ui_calculatorform.h
.
在
CalculatorForm
definition, we include the
ui_calculatorform.h
that was generated earlier.
#include "ui_calculatorform.h"
As mentioned earlier, the class is a subclass of both
QWidget
and
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); };
Two slots are defined according to the
automatic connection
naming convention required by
uic
. This is to ensure that
QMetaObject
's auto-connection facilities connect all the signals and slots involved automatically.
In the constructor, we call
setupUi()
to load the user interface file. Note that setupUi is a method of
Ui::CalculatorForm
.
CalculatorForm::CalculatorForm(QWidget *parent) : QWidget(parent) { setupUi(this); }
We include two slots,
on_inputSpinBox1_valueChanged()
and
on_inputSpinBox2_valueChanged()
. These slots respond to the
valueChanged()
signal that both spin boxes emit. Whenever there is a change in one spin box's value, we take that value and add it to whatever value the other spin box has.
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()
函数
The
main()
function instantiates
QApplication
and
CalculatorForm
。
calculator
object is displayed by invoking the
show()
函数。
int main(int argc, char *argv[]) { QApplication app(argc, argv); CalculatorForm calculator; calculator.show(); return app.exec(); }
There are various approaches to include forms into applications. The Multiple Inheritance approach is just one of them. See Using a Designer UI File in Your Application for more information on the other approaches available.