1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\example widgets/spinboxes
\title Spin Boxes Example
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.
\image 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 examples/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 examples/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 examples/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 \key{Up} and \key{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 examples/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 \gui{0%}, but will
display \gui{Automatic} when the minimum value is selected.
The third spin box shows how a prefix can be used:
\snippet examples/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 examples/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 examples/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
\key{Up} and \key{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 examples/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 examples/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 examples/widgets/spinboxes/window.cpp 9
\codeline
\snippet examples/widgets/spinboxes/window.cpp 10
A signal from this combobox is connected to a slot in the \c Window class
(shown later).
\snippet examples/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 examples/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 examples/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 examples/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 examples/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 examples/widgets/spinboxes/window.cpp 16
The third spin box displays a prefix instead of a suffix:
\snippet examples/widgets/spinboxes/window.cpp 17
We connect the QSpinBox widget that specifies the precision to a slot in
the \c Window class.
\snippet examples/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 examples/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.
*/
|