Multiple Inheritance Example#
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
in the .pro
file, as shown below:
<Code snippet "multipleinheritance/multipleinheritance.pro:0" not found>
When the project is compiled, the uic
will generate a corresponding ui_calculatorform.h
.
CalculatorForm Definition#
In the CalculatorForm
definition, we include the ui_calculatorform.h
that was generated earlier.
from ui_calculatorform import *
As mentioned earlier, the class is a subclass of both QWidget
and Ui::CalculatorForm
.
class CalculatorForm(QWidget, Ui): Q_OBJECT # public CalculatorForm = explicit(QWidget parent = None) # private slots def on_inputSpinBox1_valueChanged(value): def on_inputSpinBox2_valueChanged(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.
CalculatorForm Implementation#
In the constructor, we call setupUi()
to load the user interface file. Note that setupUi is a method of Ui::CalculatorForm
.
def __init__(self, parent): super().__init__(parent) setupUi(self)
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.
def on_inputSpinBox1_valueChanged(self, value): outputWidget.setText(QString.number(value + inputSpinBox2.value())) def on_inputSpinBox2_valueChanged(self, value): outputWidget.setText(QString.number(value + inputSpinBox1.value()))
`` main()``
Function#
The main()
function instantiates QApplication
and CalculatorForm
. The calculator
object is displayed by invoking the show()
function.
if __name__ == "__main__": app = QApplication([]) calculator = CalculatorForm() calculator.show() sys.exit(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.