| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| /*! |
| \example widgets/spinboxes |
| \title Spin Boxes Example |
| \ingroup examples-widgets |
| \brief The Spin Boxes example shows how to use the many different types of |
| spin boxes available in Qt, from a simple QSpinBox widget to more complex |
| editors like the QDateTimeEdit widget. |
| |
| \borderedimage spinboxes-example.png |
| |
| The example consists of a single \c Window class that is used to display the |
| different spin box-based widgets available with Qt. |
| |
| \section1 Window Class Definition |
| |
| The \c Window class inherits QWidget and contains two slots that are used |
| to provide interactive features: |
| |
| \snippet widgets/spinboxes/window.h 0 |
| |
| The private functions are used to set up each type of spin box in the window. |
| We use member variables to keep track of various widgets so that they can |
| be reconfigured when required. |
| |
| \section1 Window Class Implementation |
| |
| The constructor simply calls private functions to set up the different types |
| of spin box used in the example, and places each group in a layout: |
| |
| \snippet widgets/spinboxes/window.cpp 0 |
| |
| We use the layout to manage the arrangement of the window's child widgets, |
| and change the window title. |
| |
| The \c createSpinBoxes() function constructs a QGroupBox and places three |
| QSpinBox widgets inside it with descriptive labels to indicate the types of |
| input they expect. |
| |
| \snippet widgets/spinboxes/window.cpp 1 |
| |
| The first spin box shows the simplest way to use QSpinBox. It accepts values |
| from -20 to 20, the current value can be increased or decreased by 1 with |
| either the arrow buttons or \uicontrol{Up} and \uicontrol{Down} keys, and the default |
| value is 0. |
| |
| The second spin box uses a larger step size and displays a suffix to |
| provide more information about the type of data the number represents: |
| |
| \snippet widgets/spinboxes/window.cpp 2 |
| |
| This spin box also displays a |
| \l{QAbstractSpinBox::specialValueText}{special value} instead of the minimum |
| value defined for it. This means that it will never show \uicontrol{0%}, but will |
| display \uicontrol{Automatic} when the minimum value is selected. |
| |
| The third spin box shows how a prefix can be used: |
| |
| \snippet widgets/spinboxes/window.cpp 4 |
| |
| For simplicity, we show a spin box with a prefix and no suffix. It is also |
| possible to use both at the same time. |
| |
| \snippet widgets/spinboxes/window.cpp 5 |
| |
| The rest of the function sets up a layout for the group box and places each |
| of the widgets inside it. |
| |
| The \c createDateTimeEdits() function constructs another group box with a |
| selection of spin boxes used for editing dates and times. |
| |
| \snippet widgets/spinboxes/window.cpp 6 |
| |
| The first spin box is a QDateEdit widget that is able to accept dates |
| within a given range specified using QDate values. The arrow buttons and |
| \uicontrol{Up} and \uicontrol{Down} keys can be used to increase and decrease the |
| values for year, month, and day when the cursor is in the relevant section. |
| |
| The second spin box is a QTimeEdit widget: |
| |
| \snippet widgets/spinboxes/window.cpp 7 |
| |
| Acceptable values for the time are defined using QTime values. |
| |
| The third spin box is a QDateTimeEdit widget that can display both date and |
| time values, and we place a label above it to indicate the range of allowed |
| times for a meeting. These widgets will be updated when the user changes a |
| format string. |
| |
| \snippet widgets/spinboxes/window.cpp 8 |
| |
| The format string used for the date time editor, which is also shown in the |
| string displayed by the label, is chosen from a set of strings in a combobox: |
| |
| \snippet widgets/spinboxes/window.cpp 9 |
| \codeline |
| \snippet widgets/spinboxes/window.cpp 10 |
| |
| A signal from this combobox is connected to a slot in the \c Window class |
| (shown later). |
| |
| \snippet widgets/spinboxes/window.cpp 11 |
| |
| Each child widget of the group box in placed in a layout. |
| |
| The \c setFormatString() slot is called whenever the user selects a new |
| format string in the combobox. The display format for the QDateTimeEdit |
| widget is set using the raw string passed by the signal: |
| |
| \snippet widgets/spinboxes/window.cpp 12 |
| |
| Depending on the visible sections in the widget, we set a new date or time |
| range, and update the associated label to provide relevant information for |
| the user: |
| |
| \snippet widgets/spinboxes/window.cpp 13 |
| |
| When the format string is changed, there will be an appropriate label and |
| entry widget for dates, times, or both types of input. |
| |
| The \c createDoubleSpinBoxes() function constructs three spin boxes that are |
| used to input double-precision floating point numbers: |
| |
| \snippet widgets/spinboxes/window.cpp 14 |
| |
| Before the QDoubleSpinBox widgets are constructed, we create a spin box to |
| control how many decimal places they show. By default, only two decimal places |
| are shown in the following spin boxes, each of which is the equivalent of a |
| spin box in the group created by the \c createSpinBoxes() function. |
| |
| The first double spin box shows a basic double-precision spin box with the |
| same range, step size, and default value as the first spin box in the |
| \c createSpinBoxes() function: |
| |
| \snippet widgets/spinboxes/window.cpp 15 |
| |
| However, this spin box also allows non-integer values to be entered. |
| |
| The second spin box displays a suffix and shows a special value instead |
| of the minimum value: |
| |
| \snippet widgets/spinboxes/window.cpp 16 |
| |
| The third spin box displays a prefix instead of a suffix: |
| |
| \snippet widgets/spinboxes/window.cpp 17 |
| |
| We connect the QSpinBox widget that specifies the precision to a slot in |
| the \c Window class. |
| |
| \snippet widgets/spinboxes/window.cpp 18 |
| |
| The rest of the function places each of the widgets into a layout for the |
| group box. |
| |
| The \c changePrecision() slot is called when the user changes the value in |
| the precision spin box: |
| |
| \snippet widgets/spinboxes/window.cpp 19 |
| |
| This function simply uses the integer supplied by the signal to specify the |
| number of decimal places in each of the QDoubleSpinBox widgets. Each one |
| of these will be updated automatically when their |
| \l{QDoubleSpinBox::decimals}{decimals} property is changed. |
| */ |