source: trunk/doc/src/examples/ftp.qdoc@ 1168

Last change on this file since 1168 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 8.0 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the documentation of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:FDL$
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 a
14** written agreement between you and Nokia.
15**
16** GNU Free Documentation License
17** Alternatively, this file may be used under the terms of the GNU Free
18** Documentation License version 1.3 as published by the Free Software
19** Foundation and appearing in the file included in the packaging of this
20** file.
21**
22** If you have questions regarding the use of this file, please contact
23** Nokia at [email protected].
24** $QT_END_LICENSE$
25**
26****************************************************************************/
27
28/*!
29 \example network/qftp
30 \title FTP Example
31
32 The FTP example demonstrates a simple FTP client that can be used
33 to list the available files on an FTP server and download them.
34
35 \image ftp-example.png
36
37 The user of the example can enter the address or hostname of an
38 FTP server in the \gui {Ftp Server} line edit, and then push the
39 \gui Connect button to connect to it. A list of the server's
40 top-level directory is then presented in the \gui {File List} tree
41 view. If the selected item in the view is a file, the user can
42 download it by pushing the \gui Download button. An item
43 representing a directory can be double clicked with the mouse to
44 show the contents of that directory in the view.
45
46 The functionality required for the example is implemented in the
47 QFtp class, which provides an easy, high-level interface to the
48 file transfer protocol. FTP operations are requested through
49 \l{QFtp::Command}s. The operations are asynchronous. QFtp will
50 notify us through signals when commands are started and finished.
51
52 We have one class, \c FtpWindow, which sets up the GUI and handles
53 the FTP functionality. We will now go through its definition and
54 implementation - focusing on the code concerning FTP. The code for
55 managing the GUI is explained in other examples.
56
57 \section1 FtpWindow Class Definition
58
59 The \c FtpWindow class displays a window, in which the user can
60 connect to and browse the contents of an FTP server. The slots of
61 \c FtpWindow are connected to its widgets, and contain the
62 functionality for managing the FTP connection. We also connect to
63 signals in QFtp, which tells us when the
64 \l{QFtp::Command}{commands} we request are finished, the progress
65 of current commands, and information about files on the server.
66
67 \snippet examples/network/qftp/ftpwindow.h 0
68
69 We will look at each slot when we examine the \c FtpWindow
70 implementation in the next section. We also make use of a few
71 private variables:
72
73 \snippet examples/network/qftp/ftpwindow.h 1
74
75 The \c isDirectory hash keeps a history of all entries explored on
76 the FTP server, and registers whether an entry represents a
77 directory or a file. We use the QFile object to download files
78 from the FTP server.
79
80 \section1 FtpWindow Class Implementation
81
82 We skip the \c FtpWindow constructor as it only contains code for
83 setting up the GUI, which is explained in other examples.
84
85 We move on to the slots, starting with \c connectOrDisconnect().
86
87 \snippet examples/network/qftp/ftpwindow.cpp 0
88
89 If \c ftp is already pointing to a QFtp object, we QFtp::Close its
90 FTP connection and delete the object it points to. Note that we do
91 not delete the object using standard C++ \c delete as we need it
92 to finish its abort operation.
93
94 \dots
95 \snippet examples/network/qftp/ftpwindow.cpp 1
96
97 If we get here, \c connectOrDisconnect() was called to establish a
98 new FTP connection. We create a new QFtp for our new connection,
99 and connect its signals to slots in \c FtpWindow. The
100 \l{QFtp::}{listInfo()} signal is emitted whenever information
101 about a single file on the sever has been resolved. This signal is
102 sent when we ask QFtp to \l{QFtp::}{list()} the contents of a
103 directory. Finally, the \l{QFtp::}{dataTransferProgress()} signal
104 is emitted repeatedly during an FTP file transfer, giving us
105 progress reports.
106
107 \snippet examples/network/qftp/ftpwindow.cpp 2
108
109 The \gui {Ftp Server} line edit contains the IP address or
110 hostname of the server to which we want to connect. We first check
111 that the URL is a valid FTP sever address. If it isn't, we still
112 try to connect using the plain text in \c ftpServerLineEdit. In
113 either case, we assume that port \c 21 is used.
114
115 If the URL does not contain a user name and password, we use
116 QFtp::login(), which will attempt to log into the FTP sever as an
117 anonymous user. The QFtp object will now notify us when it has
118 connected to the FTP server; it will also send a signal if it
119 fails to connect or the username and password were rejected.
120
121 We move on to the \c downloadFile() slot:
122
123 \snippet examples/network/qftp/ftpwindow.cpp 3
124 \dots
125 \snippet examples/network/qftp/ftpwindow.cpp 4
126
127 We first fetch the name of the file, which we find in the selected
128 item of \c fileList. We then start the download by using
129 QFtp::get(). QFtp will send progress signals during the download
130 and a signal when the download is completed.
131
132 \snippet examples/network/qftp/ftpwindow.cpp 5
133
134 QFtp supports canceling the download of files.
135
136 \snippet examples/network/qftp/ftpwindow.cpp 6
137
138 The \c ftpCommandFinished() slot is called when QFtp has
139 finished a QFtp::Command. If an error occurred during the
140 command, QFtp will set \c error to one of the values in
141 the QFtp::Error enum; otherwise, \c error is zero.
142
143 \snippet examples/network/qftp/ftpwindow.cpp 7
144
145 After login, the QFtp::list() function will list the top-level
146 directory on the server. addToList() is connected to
147 QFtp::listInfo(), and will be invoked for each entry in that
148 directory.
149
150 \snippet examples/network/qftp/ftpwindow.cpp 8
151
152 When a \l{QFtp::}{Get} command is finished, a file has finished
153 downloading (or an error occurred during the download).
154
155 \snippet examples/network/qftp/ftpwindow.cpp 9
156
157 After a \l{QFtp::}{List} command is performed, we have to check if
158 no entries were found (in which case our \c addToList() function
159 would not have been called).
160
161 Let's continue with the \c addToList() slot:
162
163 \snippet examples/network/qftp/ftpwindow.cpp 10
164
165 When a new file has been resolved during a QFtp::List command,
166 this slot is invoked with a QUrlInfo describing the file. We
167 create a separate row for the file in \c fileList. If \c fileList
168 does not have a current item, we set the new item to be the
169 current item.
170
171 \snippet examples/network/qftp/ftpwindow.cpp 11
172
173 The \c processItem() slot is called when an item is double clicked
174 in the \gui {File List}. If the item represents a directory, we
175 want to load the contents of that directory with QFtp::list().
176
177 \snippet examples/network/qftp/ftpwindow.cpp 12
178
179 \c cdToParent() is invoked when the user requests to go to the
180 parent directory of the one displayed in the file list. After
181 changing the directory, we QFtp::List its contents.
182
183 \snippet examples/network/qftp/ftpwindow.cpp 13
184
185 The \c updateDataTransferProgress() slot is called regularly by
186 QFtp::dataTransferProgress() when a file download is in progress.
187 We use a QProgressDialog to show the download progression to the
188 user.
189
190 \snippet examples/network/qftp/ftpwindow.cpp 14
191
192 The \c enableDownloadButton() is called whenever the current item
193 in \c fileList changes. If the item represents a file, the \gui
194 {Enable Download} Button should be enabled; otherwise, it is
195 disabled.
196*/
197
Note: See TracBrowser for help on using the repository browser.