source: trunk/doc/src/examples/completer.qdoc@ 651

Last change on this file since 651 was 651, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.2 sources.

File size: 10.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the documentation of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42/*!
43 \example tools/completer
44 \title Completer Example
45
46 The Completer example shows how to provide string-completion facilities
47 for an input widget based on data provided by a model.
48
49 \image completer-example.png
50
51 This example uses a custom item model, \c DirModel, and a QCompleter object.
52 QCompleter is a class that provides completions based on an item model. The
53 type of model, the completion mode, and the case sensitivity can be
54 selected using combo boxes.
55
56 \section1 The Resource File
57
58 The Completer example requires a resource file in order to store the
59 \e{countries.txt} and \e{words.txt}. The resource file contains the
60 following code:
61
62 \quotefile examples/tools/completer/completer.qrc
63
64 \section1 DirModel Class Definition
65
66 The \c DirModel class is a subclass of QDirModel, which provides a data
67 model for the local filesystem.
68
69 \snippet examples/tools/completer/dirmodel.h 0
70
71 This class only has a constructor and a \c data() function as it is only
72 created to enable \c data() to return the entire file path for the
73 display role, unlike \l{QDirModel}'s \c data() function that only returns
74 the folder and not the drive label. This is further explained in
75 \c DirModel's implementation.
76
77 \section1 DirModel Class Implementation
78
79 The constructor for the \c DirModel class is used to pass \a parent to
80 QDirModel.
81
82 \snippet examples/tools/completer/dirmodel.cpp 0
83
84 As mentioned earlier, the \c data() function is reimplemented in order to
85 get it to return the entire file parth for the display role. For example,
86 with a QDirModel, you will see "Program Files" in the view. However, with
87 \c DirModel, you will see "C:\\Program Files".
88
89 \snippet examples/tools/completer/dirmodel.cpp 1
90
91 The screenshots below illustrate this difference:
92
93 \table
94 \row \o \inlineimage completer-example-qdirmodel.png
95 \o \inlineimage completer-example-dirmodel.png
96 \endtable
97
98 The Qt::EditRole, which QCompleter uses to look for matches, is left
99 unchanged.
100
101 \section1 MainWindow Class Definition
102
103 The \c MainWindow class is a subclass of QMainWindow and implements five
104 private slots - \c about(), \c changeCase(), \c changeMode(), \c changeModel(),
105 and \c changeMaxVisible().
106
107 \snippet examples/tools/completer/mainwindow.h 0
108
109 Within the \c MainWindow class, we have two private functions:
110 \c createMenu() and \c modelFromFile(). We also declare the private widgets
111 needed - three QComboBox objects, a QCheckBox, a QCompleter, a QLabel, and
112 a QLineEdit.
113
114 \snippet examples/tools/completer/mainwindow.h 1
115
116 \section1 MainWindow Class Implementation
117
118 The constructor of \c MainWindow constructs a \c MainWindow with a parent
119 widget and initializes the private members. The \c createMenu() function
120 is then invoked.
121
122 We set up three QComboBox objects, \c modelComb, \c modeCombo and
123 \c caseCombo. By default, the \c modelCombo is set to QDirModel,
124 the \c modeCombo is set to "Filtered Popup" and the \c caseCombo is set
125 to "Case Insensitive".
126
127 \snippet examples/tools/completer/mainwindow.cpp 0
128
129 The \c maxVisibleSpinBox is created and determines the number of visible
130 item in the completer
131
132 The \c wrapCheckBox is then set up. This \c checkBox determines if the
133 \c{completer}'s \l{QCompleter::setWrapAround()}{setWrapAround()} property
134 is enabled or disabled.
135
136 \snippet examples/tools/completer/mainwindow.cpp 1
137
138 We instantiate \c contentsLabel and set its size policy to
139 \l{QSizePolicy::Fixed}{fixed}. The combo boxes' \l{QComboBox::activated()}
140 {activated()} signals are then connected to their respective slots.
141
142 \snippet examples/tools/completer/mainwindow.cpp 2
143
144 The \c lineEdit is set up and then we arrange all the widgets using a
145 QGridLayout. The \c changeModel() function is called, to initialize the
146 \c completer.
147
148 \snippet examples/tools/completer/mainwindow.cpp 3
149
150 The \c createMenu() function is used to instantiate the QAction objects
151 needed to fill the \c fileMenu and \c helpMenu. The actions'
152 \l{QAction::triggered()}{triggered()} signals are connected to their
153 respective slots.
154
155 \snippet examples/tools/completer/mainwindow.cpp 4
156
157 The \c modelFromFile() function accepts the \a fileName of a file and
158 processes it depending on its contents.
159
160 We first validate the \c file to ensure that it can be opened in
161 QFile::ReadOnly mode. If this is unsuccessful, the function returns an
162 empty QStringListModel.
163
164 \snippet examples/tools/completer/mainwindow.cpp 5
165
166 The mouse cursor is then overriden with Qt::WaitCursor before we fill
167 a QStringList object, \c words, with the contents of \c file. Once this
168 is done, we restore the mouse cursor.
169
170 \snippet examples/tools/completer/mainwindow.cpp 6
171
172 As mentioned earlier, the resources file contains two files -
173 \e{countries.txt} and \e{words.txt}. If the \c file read is \e{words.txt},
174 we return a QStringListModel with \c words as its QStringList and
175 \c completer as its parent.
176
177 \snippet examples/tools/completer/mainwindow.cpp 7
178
179 If the \c file read is \e{countries.txt}, then we require a
180 QStandardItemModel with \c words.count() rows, 2 columns, and \c completer
181 as its parent.
182
183 \snippet examples/tools/completer/mainwindow.cpp 8
184
185 A standard line in \e{countries.txt} is:
186 \quotation
187 Norway NO
188 \endquotation
189
190 Hence, to populate the QStandardItemModel object, \c m, we have to
191 split the country name and its symbol. Once this is done, we return
192 \c m.
193
194 \snippet examples/tools/completer/mainwindow.cpp 9
195
196 The \c changeMode() function sets the \c{completer}'s mode, depending on
197 the value of \c index.
198
199 \snippet examples/tools/completer/mainwindow.cpp 10
200
201 The \c changeModel() function changes the item model used based on the
202 model selected by the user.
203
204 A \c switch statement is used to change the item model based on the index
205 of \c modelCombo. If \c case is 0, we use an unsorted QDirModel, providing
206 us with a file path excluding the drive label.
207
208 \snippet examples/tools/completer/mainwindow.cpp 11
209
210 Note that we create the model with \c completer as the parent as this
211 allows us to replace the model with a new model. The \c completer will
212 ensure that the old one is deleted the moment a new model is assigned
213 to it.
214
215 If \c case is 1, we use the \c DirModel we defined earlier, resulting in
216 full paths for the files.
217
218 \snippet examples/tools/completer/mainwindow.cpp 12
219
220 When \c case is 2, we attempt to complete names of countries. This requires
221 a QTreeView object, \c treeView. The country names are extracted from
222 \e{countries.txt} and set the popup used to display completions to
223 \c treeView.
224
225 \snippet examples/tools/completer/mainwindow.cpp 13
226
227 The screenshot below shows the Completer with the country list model.
228
229 \image completer-example-country.png
230
231 If \c case is 3, we attempt to complete words. This is done using a
232 QStringListModel that contains data extracted from \e{words.txt}. The
233 model is sorted \l{QCompleter::CaseInsensitivelySortedModel}
234 {case insensitively}.
235
236 The screenshot below shows the Completer with the word list model.
237
238 \image completer-example-word.png
239
240 Once the model type is selected, we call the \c changeMode() function and
241 the \c changeCase() function and set the wrap option accordingly. The
242 \c{wrapCheckBox}'s \l{QCheckBox::clicked()}{clicked()} signal is connected
243 to the \c{completer}'s \l{QCompleter::setWrapAround()}{setWrapAround()}
244 slot.
245
246 \snippet examples/tools/completer/mainwindow.cpp 14
247
248 The \c changeMaxVisible() update the maximum number of visible items in
249 the completer.
250
251 \snippet examples/tools/completer/mainwindow.cpp 15
252
253 The \c about() function provides a brief description about the example.
254
255 \snippet examples/tools/completer/mainwindow.cpp 16
256
257 \section1 \c main() Function
258
259 The \c main() function instantiates QApplication and \c MainWindow and
260 invokes the \l{QWidget::show()}{show()} function.
261
262 \snippet examples/tools/completer/main.cpp 0
263 */
Note: See TracBrowser for help on using the repository browser.