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.

../_images/multipleinheritance-example.png

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)
slots: = private()
    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):
    QWidget.__init__(self, 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.

Example project @ code.qt.io