diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-01-23 18:06:51 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-01-23 21:20:42 +0000 |
commit | 81a7ba345cfde7862e61a2a482324cf5b391d6f0 (patch) | |
tree | 49cf77a58bfe3e92fa8c1a84025b1f97bf301ff3 | |
parent | 159a62f184828ef36f076f2caa286e8beb67e0d4 (diff) | |
download | qttools-81a7ba345cfde7862e61a2a482324cf5b391d6f0.tar.gz |
Qt Designer/calculatorform example: Remove autoconnected slots
The autoconnection feature is considered error-prone and is warned
about by clazy.
As a drive-by, fix the documentation of the project files.
Task-number: QTBUG-110447
Change-Id: I7ba1bf47487abadfeaf02fd573eb01d0519a2ffd
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
(cherry picked from commit d3a36cf82e2b7f64eb2e096a87e589479d8ac1df)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | examples/designer/calculatorform/CMakeLists.txt | 4 | ||||
-rw-r--r-- | examples/designer/calculatorform/calculatorform.cpp | 14 | ||||
-rw-r--r-- | examples/designer/calculatorform/calculatorform.h | 3 | ||||
-rw-r--r-- | examples/designer/doc/src/calculatorform.qdoc | 47 |
4 files changed, 28 insertions, 40 deletions
diff --git a/examples/designer/calculatorform/CMakeLists.txt b/examples/designer/calculatorform/CMakeLists.txt index d68752b6a..27856f091 100644 --- a/examples/designer/calculatorform/CMakeLists.txt +++ b/examples/designer/calculatorform/CMakeLists.txt @@ -2,7 +2,9 @@ cmake_minimum_required(VERSION 3.16) project(calculatorform LANGUAGES CXX) set(CMAKE_AUTOMOC ON) +#! [0] set(CMAKE_AUTOUIC ON) +#! [0] if(NOT DEFINED INSTALL_EXAMPLESDIR) set(INSTALL_EXAMPLESDIR "examples") @@ -12,10 +14,12 @@ set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/designer/calculatorform") find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) +#! [1] qt_add_executable(calculatorform calculatorform.cpp calculatorform.h calculatorform.ui main.cpp ) +#! [1] set_target_properties(calculatorform PROPERTIES WIN32_EXECUTABLE TRUE diff --git a/examples/designer/calculatorform/calculatorform.cpp b/examples/designer/calculatorform/calculatorform.cpp index 8d5fc88d3..24ce24a61 100644 --- a/examples/designer/calculatorform/calculatorform.cpp +++ b/examples/designer/calculatorform/calculatorform.cpp @@ -8,19 +8,15 @@ 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); } //! [0] //! [1] -void CalculatorForm::on_inputSpinBox1_valueChanged(int value) +void CalculatorForm::updateResult() { - ui.outputWidget->setText(QString::number(value + ui.inputSpinBox2->value())); + const int sum = ui.inputSpinBox1->value() + ui.inputSpinBox2->value(); + ui.outputWidget->setText(QString::number(sum)); } //! [1] - -//! [2] -void CalculatorForm::on_inputSpinBox2_valueChanged(int value) -{ - ui.outputWidget->setText(QString::number(value + ui.inputSpinBox1->value())); -} -//! [2] diff --git a/examples/designer/calculatorform/calculatorform.h b/examples/designer/calculatorform/calculatorform.h index bb301ceaa..9224ba027 100644 --- a/examples/designer/calculatorform/calculatorform.h +++ b/examples/designer/calculatorform/calculatorform.h @@ -17,8 +17,7 @@ public: explicit CalculatorForm(QWidget *parent = nullptr); private slots: - void on_inputSpinBox1_valueChanged(int value); - void on_inputSpinBox2_valueChanged(int value); + void updateResult(); private: Ui::CalculatorForm ui; diff --git a/examples/designer/doc/src/calculatorform.qdoc b/examples/designer/doc/src/calculatorform.qdoc index 32d4ef48f..37d356ac6 100644 --- a/examples/designer/doc/src/calculatorform.qdoc +++ b/examples/designer/doc/src/calculatorform.qdoc @@ -10,9 +10,7 @@ The Calculator Form Example shows how to use a form created with \QD in an application by using the user interface information from - a QWidget subclass. We use \l{Using a Designer UI File in Your Application} - {uic's auto-connection} feature to automatically connect signals - from widgets on the form to slots in our code. + a QWidget subclass. \image calculatorform-example.png Screenshot of the Calculator Form example @@ -27,8 +25,14 @@ result is a UI file describing the form, the widgets used, any signal-slot connections between them, and other standard user interface properties. - To ensure that the example can use this file, we need to include a \c FORMS - declaration in the example's project file: + To ensure that the example can use this file, we enable the \c CMAKE_AUTOUIC + feature and list the UI file in the source files: + + \snippet calculatorform/CMakeLists.txt 0 + \codeline + \snippet calculatorform/CMakeLists.txt 1 + + For \c qmake, we need to include a \c FORMS declaration in the example's project file: \snippet calculatorform/calculatorform.pro 1 @@ -49,16 +53,17 @@ \snippet calculatorform/calculatorform.h 1 - Apart from the constructor, the class contains two private slots that - are named according to the auto-connection naming convention required - by \c uic. + Apart from the constructor, the class contains a private slot + \c updateResult() that performs the calculation and updates the output + widget accordingly. The private \c ui member variable refers to the form, and is used to access the contents of the user interface. \section1 CalculatorForm Class Implementation - The constructor simply calls the base class's constructor and - sets up the form's user interface. + The constructor simply calls the base class's constructor, + sets up the form's user interface and connects + the signals \l{QSpinBox::valueChanged()} to the slot \c updateResult(). \snippet calculatorform/calculatorform.cpp 0 @@ -66,26 +71,10 @@ \c this as the argument to this function to use the \c CalculatorForm widget itself as the container for the user interface. - To automatically connect signals from the spin boxes defined in the - user interface, we use the naming convention that indicates which - widgets and their signals in the user interface should be connected - to each slot. The first slot is called whenever the spin box called - "inputSpinBox1" in the user interface emits the - \l{QSpinBox::valueChanged()}{valueChanged()} signal: + Slot \c updateResult() adds the values and sets the result on + the output widget: \snippet calculatorform/calculatorform.cpp 1 - When this occurs, we use the value supplied by the signal to update the - output label by setting its new text directly. We access the output label - and the other spin box via the class's private \c ui variable. - - The second slot is called whenever the second spin box, called - "inputSpinBox2", emits the \l{QSpinBox::valueChanged()}{valueChanged()} - signal: - - \snippet calculatorform/calculatorform.cpp 2 - - In this case, the value from the first spin box is read and combined - with the value supplied by the signal. Again, the output label is - updated directly via the \c ui variable. + It is called whenever the value of one of the spin boxes changes. */ |