~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to doc/html/network-http-httpwindow-cpp.html

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="iso-8859-1"?>
 
2
<!DOCTYPE html
 
3
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
 
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
5
<head>
 
6
    <title>Qt 4.0: httpwindow.cpp Example File (network/http/httpwindow.cpp)</title>
 
7
    <style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
 
8
a:link { color: #004faf; text-decoration: none }
 
9
a:visited { color: #672967; text-decoration: none }
 
10
td.postheader { font-family: sans-serif }
 
11
tr.address { font-family: sans-serif }
 
12
body { background: #ffffff; color: black; }</style>
 
13
</head>
 
14
<body>
 
15
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 
16
<tr>
 
17
<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="32" height="32" border="0" /></td>
 
18
<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a>&nbsp;&middot; <a href="classes.html"><font color="#004faf">All&nbsp;Classes</font></a>&nbsp;&middot; <a href="mainclasses.html"><font color="#004faf">Main&nbsp;Classes</font></a>&nbsp;&middot; <a href="annotated.html"><font color="#004faf">Annotated</font></a>&nbsp;&middot; <a href="groups.html"><font color="#004faf">Grouped&nbsp;Classes</font></a>&nbsp;&middot; <a href="functions.html"><font color="#004faf">Functions</font></a></td>
 
19
<td align="right" valign="top" width="230"><img src="images/trolltech-logo.png" align="right" width="203" height="32" border="0" /></td></tr></table><h1 align="center">httpwindow.cpp Example File<br /><small><small>network/http/httpwindow.cpp</small></small></h1>
 
20
<pre>&nbsp;   /****************************************************************************
 
21
    **
 
22
    ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
 
23
    **
 
24
    ** This file is part of the documentation of the Qt Toolkit.
 
25
    **
 
26
    ** This file may be distributed under the terms of the Q Public License
 
27
** as defined by Trolltech AS of Norway and appearing in the file
 
28
** LICENSE.QPL included in the packaging of this file.
 
29
**
 
30
** This file may be distributed and/or modified under the terms of the
 
31
** GNU General Public License version 2 as published by the Free Software
 
32
** Foundation and appearing in the file LICENSE.GPL included in the
 
33
** packaging of this file.
 
34
**
 
35
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
 
36
**   information about Qt Commercial License Agreements.
 
37
** See http://www.trolltech.com/qpl/ for QPL licensing information.
 
38
** See http://www.trolltech.com/gpl/ for GPL licensing information.
 
39
**
 
40
** Contact info@trolltech.com if any conditions of this licensing are
 
41
** not clear to you.
 
42
    **
 
43
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 
44
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
45
    **
 
46
    ****************************************************************************/
 
47
 
 
48
    #include &lt;QtGui&gt;
 
49
    #include &lt;QtNetwork&gt;
 
50
 
 
51
    #include &quot;httpwindow.h&quot;
 
52
 
 
53
    HttpWindow::HttpWindow(QWidget *parent)
 
54
        : QDialog(parent)
 
55
    {
 
56
        urlLineEdit = new QLineEdit(&quot;http://www.ietf.org/iesg/1rfc_index.txt&quot;);
 
57
 
 
58
        urlLabel = new QLabel(tr(&quot;&amp;URL:&quot;));
 
59
        urlLabel-&gt;setBuddy(urlLineEdit);
 
60
        statusLabel = new QLabel(tr(&quot;Please enter the URL of a file you want to &quot;
 
61
                                    &quot;download.&quot;));
 
62
 
 
63
        quitButton = new QPushButton(tr(&quot;Quit&quot;));
 
64
        downloadButton = new QPushButton(tr(&quot;Download&quot;));
 
65
        downloadButton-&gt;setDefault(true);
 
66
 
 
67
        progressDialog = new QProgressDialog(this);
 
68
 
 
69
        http = new QHttp(this);
 
70
 
 
71
        connect(urlLineEdit, SIGNAL(textChanged(const QString &amp;)),
 
72
                this, SLOT(enableDownloadButton()));
 
73
        connect(http, SIGNAL(requestFinished(int, bool)),
 
74
                this, SLOT(httpRequestFinished(int, bool)));
 
75
        connect(http, SIGNAL(dataReadProgress(int, int)),
 
76
                this, SLOT(updateDataReadProgress(int, int)));
 
77
        connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &amp;)),
 
78
                this, SLOT(readResponseHeader(const QHttpResponseHeader &amp;)));
 
79
        connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));
 
80
        connect(downloadButton, SIGNAL(clicked()), this, SLOT(downloadFile()));
 
81
        connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
 
82
 
 
83
        QHBoxLayout *topLayout = new QHBoxLayout;
 
84
        topLayout-&gt;addWidget(urlLabel);
 
85
        topLayout-&gt;addWidget(urlLineEdit);
 
86
 
 
87
        QHBoxLayout *buttonLayout = new QHBoxLayout;
 
88
        buttonLayout-&gt;addStretch(1);
 
89
        buttonLayout-&gt;addWidget(downloadButton);
 
90
        buttonLayout-&gt;addWidget(quitButton);
 
91
 
 
92
        QVBoxLayout *mainLayout = new QVBoxLayout;
 
93
        mainLayout-&gt;addLayout(topLayout);
 
94
        mainLayout-&gt;addWidget(statusLabel);
 
95
        mainLayout-&gt;addLayout(buttonLayout);
 
96
        setLayout(mainLayout);
 
97
 
 
98
        setWindowTitle(tr(&quot;HTTP&quot;));
 
99
        urlLineEdit-&gt;setFocus();
 
100
    }
 
101
 
 
102
    void HttpWindow::downloadFile()
 
103
    {
 
104
        QUrl url(urlLineEdit-&gt;text());
 
105
        QFileInfo fileInfo(url.path());
 
106
        QString fileName = fileInfo.fileName();
 
107
 
 
108
        if (QFile::exists(fileName)) {
 
109
            QMessageBox::information(this, tr(&quot;HTTP&quot;),
 
110
                                     tr(&quot;There already exists a file called %1 in &quot;
 
111
                                        &quot;the current directory.&quot;)
 
112
                                     .arg(fileName));
 
113
            return;
 
114
        }
 
115
 
 
116
        file = new QFile(fileName);
 
117
        if (!file-&gt;open(QIODevice::WriteOnly)) {
 
118
            QMessageBox::information(this, tr(&quot;HTTP&quot;),
 
119
                                     tr(&quot;Unable to save the file %1: %2.&quot;)
 
120
                                     .arg(fileName).arg(file-&gt;errorString()));
 
121
            delete file;
 
122
            file = 0;
 
123
            return;
 
124
        }
 
125
 
 
126
        http-&gt;setHost(url.host(), url.port() != -1 ? url.port() : 80);
 
127
        if (!url.userName().isEmpty())
 
128
            http-&gt;setUser(url.userName(), url.password());
 
129
 
 
130
        httpRequestAborted = false;
 
131
        httpGetId = http-&gt;get(url.path(), file);
 
132
 
 
133
        progressDialog-&gt;setWindowTitle(tr(&quot;HTTP&quot;));
 
134
        progressDialog-&gt;setLabelText(tr(&quot;Downloading %1.&quot;).arg(fileName));
 
135
        downloadButton-&gt;setEnabled(false);
 
136
    }
 
137
 
 
138
    void HttpWindow::cancelDownload()
 
139
    {
 
140
        statusLabel-&gt;setText(tr(&quot;Download canceled.&quot;));
 
141
        httpRequestAborted = true;
 
142
        http-&gt;abort();
 
143
        downloadButton-&gt;setEnabled(true);
 
144
    }
 
145
 
 
146
    void HttpWindow::httpRequestFinished(int requestId, bool error)
 
147
    {
 
148
        if (httpRequestAborted) {
 
149
            if (file) {
 
150
                file-&gt;close();
 
151
                file-&gt;remove();
 
152
                delete file;
 
153
                file = 0;
 
154
            }
 
155
 
 
156
            progressDialog-&gt;hide();
 
157
            return;
 
158
        }
 
159
 
 
160
        if (requestId != httpGetId)
 
161
            return;
 
162
 
 
163
        progressDialog-&gt;hide();
 
164
        file-&gt;close();
 
165
 
 
166
        if (error) {
 
167
            file-&gt;remove();
 
168
            QMessageBox::information(this, tr(&quot;HTTP&quot;),
 
169
                                     tr(&quot;Download failed: %1.&quot;)
 
170
                                     .arg(http-&gt;errorString()));
 
171
        } else {
 
172
            QString fileName = QFileInfo(QUrl(urlLineEdit-&gt;text()).path()).fileName();
 
173
            statusLabel-&gt;setText(tr(&quot;Downloaded %1 to current directory.&quot;).arg(fileName));
 
174
        }
 
175
 
 
176
        downloadButton-&gt;setEnabled(true);
 
177
        delete file;
 
178
        file = 0;
 
179
    }
 
180
 
 
181
    void HttpWindow::readResponseHeader(const QHttpResponseHeader &amp;responseHeader)
 
182
    {
 
183
        if (responseHeader.statusCode() != 200) {
 
184
            QMessageBox::information(this, tr(&quot;HTTP&quot;),
 
185
                                     tr(&quot;Download failed: %1.&quot;)
 
186
                                     .arg(responseHeader.reasonPhrase()));
 
187
            httpRequestAborted = true;
 
188
            progressDialog-&gt;hide();
 
189
            http-&gt;abort();
 
190
            return;
 
191
        }
 
192
    }
 
193
 
 
194
    void HttpWindow::updateDataReadProgress(int bytesRead, int totalBytes)
 
195
    {
 
196
        if (httpRequestAborted)
 
197
            return;
 
198
 
 
199
        progressDialog-&gt;setMaximum(totalBytes);
 
200
        progressDialog-&gt;setValue(bytesRead);
 
201
    }
 
202
 
 
203
    void HttpWindow::enableDownloadButton()
 
204
    {
 
205
        downloadButton-&gt;setEnabled(!urlLineEdit-&gt;text().isEmpty());
 
206
    }</pre>
 
207
<p /><address><hr /><div align="center">
 
208
<table width="100%" cellspacing="0" border="0"><tr class="address">
 
209
<td width="30%">Copyright &copy; 2005 <a href="trolltech.html">Trolltech</a></td>
 
210
<td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td>
 
211
<td width="30%" align="right"><div align="right">Qt 4.0.0</div></td>
 
212
</tr></table></div></address></body>
 
213
</html>