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

« back to all changes in this revision

Viewing changes to doc/html/network-loopback-dialog-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: dialog.cpp Example File (network/loopback/dialog.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">dialog.cpp Example File<br /><small><small>network/loopback/dialog.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;dialog.h&quot;
 
52
 
 
53
    static const int TotalBytes = 50 * 1024 * 1024;
 
54
    static const int PayloadSize = 65536;
 
55
 
 
56
    Dialog::Dialog(QWidget *parent)
 
57
        : QDialog(parent)
 
58
    {
 
59
        clientProgressBar = new QProgressBar;
 
60
        clientStatusLabel = new QLabel(tr(&quot;Client ready&quot;));
 
61
        serverProgressBar = new QProgressBar;
 
62
        serverStatusLabel = new QLabel(tr(&quot;Server ready&quot;));
 
63
 
 
64
        startButton = new QPushButton(tr(&quot;&amp;Start&quot;));
 
65
        quitButton = new QPushButton(tr(&quot;&amp;Quit&quot;));
 
66
 
 
67
        connect(startButton, SIGNAL(clicked()), this, SLOT(start()));
 
68
        connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
 
69
        connect(&amp;tcpServer, SIGNAL(newConnection()),
 
70
                this, SLOT(acceptConnection()));
 
71
        connect(&amp;tcpClient, SIGNAL(connected()), this, SLOT(startTransfer()));
 
72
        connect(&amp;tcpClient, SIGNAL(bytesWritten(qint64)),
 
73
                this, SLOT(updateClientProgress(qint64)));
 
74
        connect(&amp;tcpClient, SIGNAL(error(SocketError)),
 
75
                this, SLOT(displayError(SocketError)));
 
76
 
 
77
        QHBoxLayout *buttonLayout = new QHBoxLayout;
 
78
        buttonLayout-&gt;addStretch(1);
 
79
        buttonLayout-&gt;addWidget(startButton);
 
80
        buttonLayout-&gt;addWidget(quitButton);
 
81
 
 
82
        QVBoxLayout *mainLayout = new QVBoxLayout;
 
83
        mainLayout-&gt;addWidget(clientProgressBar);
 
84
        mainLayout-&gt;addWidget(clientStatusLabel);
 
85
        mainLayout-&gt;addWidget(serverProgressBar);
 
86
        mainLayout-&gt;addWidget(serverStatusLabel);
 
87
        mainLayout-&gt;addLayout(buttonLayout);
 
88
        setLayout(mainLayout);
 
89
 
 
90
        setWindowTitle(tr(&quot;Loopback&quot;));
 
91
    }
 
92
 
 
93
    void Dialog::start()
 
94
    {
 
95
        startButton-&gt;setEnabled(false);
 
96
 
 
97
        QApplication::setOverrideCursor(Qt::WaitCursor);
 
98
 
 
99
        bytesWritten = 0;
 
100
        bytesReceived = 0;
 
101
 
 
102
        while (!tcpServer.isListening() &amp;&amp; !tcpServer.listen()) {
 
103
            int ret = QMessageBox::critical(this, tr(&quot;Loopback&quot;),
 
104
                                            tr(&quot;Unable to start the test: %1.&quot;)
 
105
                                            .arg(tcpServer.errorString()),
 
106
                                            QMessageBox::Retry,
 
107
                                            QMessageBox::Cancel);
 
108
            if (ret == QMessageBox::Cancel)
 
109
                return;
 
110
        }
 
111
 
 
112
        serverStatusLabel-&gt;setText(tr(&quot;Listening&quot;));
 
113
        clientStatusLabel-&gt;setText(tr(&quot;Connecting&quot;));
 
114
        tcpClient.connectToHost(QHostAddress::LocalHost, tcpServer.serverPort());
 
115
    }
 
116
 
 
117
    void Dialog::acceptConnection()
 
118
    {
 
119
        tcpServerConnection = tcpServer.nextPendingConnection();
 
120
        connect(tcpServerConnection, SIGNAL(readyRead()),
 
121
                this, SLOT(updateServerProgress()));
 
122
        connect(tcpServerConnection, SIGNAL(error(SocketError)),
 
123
                this, SLOT(displayError(SocketError)));
 
124
 
 
125
        serverStatusLabel-&gt;setText(tr(&quot;Accepted connection&quot;));
 
126
        tcpServer.close();
 
127
    }
 
128
 
 
129
    void Dialog::startTransfer()
 
130
    {
 
131
        bytesToWrite = TotalBytes - (int)tcpClient.write(QByteArray(PayloadSize, '@'));
 
132
        clientStatusLabel-&gt;setText(tr(&quot;Connected&quot;));
 
133
    }
 
134
 
 
135
    void Dialog::updateServerProgress()
 
136
    {
 
137
        bytesReceived += (int)tcpServerConnection-&gt;bytesAvailable();
 
138
        tcpServerConnection-&gt;readAll();
 
139
 
 
140
        serverProgressBar-&gt;setMaximum(TotalBytes);
 
141
        serverProgressBar-&gt;setValue(bytesReceived);
 
142
        serverStatusLabel-&gt;setText(tr(&quot;Received %1MB&quot;)
 
143
                                   .arg(bytesReceived / (1024 * 1024)));
 
144
 
 
145
        if (bytesReceived == TotalBytes) {
 
146
            tcpServerConnection-&gt;close();
 
147
            startButton-&gt;setEnabled(true);
 
148
            QApplication::restoreOverrideCursor();
 
149
        }
 
150
    }
 
151
 
 
152
    void Dialog::updateClientProgress(qint64 numBytes)
 
153
    {
 
154
        bytesWritten += (int)numBytes;
 
155
        if (bytesToWrite &gt; 0)
 
156
            bytesToWrite -= (int)tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@'));
 
157
 
 
158
        clientProgressBar-&gt;setMaximum(TotalBytes);
 
159
        clientProgressBar-&gt;setValue(bytesWritten);
 
160
        clientStatusLabel-&gt;setText(tr(&quot;Sent %1MB&quot;)
 
161
                                   .arg(bytesWritten / (1024 * 1024)));
 
162
    }
 
163
 
 
164
    void Dialog::displayError(QTcpSocket::SocketError socketError)
 
165
    {
 
166
        if (socketError == QTcpSocket::RemoteHostClosedError)
 
167
            return;
 
168
 
 
169
        QMessageBox::information(this, tr(&quot;Network error&quot;),
 
170
                                 tr(&quot;The following error occurred: %1.&quot;)
 
171
                                 .arg(tcpClient.errorString()));
 
172
 
 
173
        tcpClient.close();
 
174
        tcpServer.close();
 
175
        clientProgressBar-&gt;reset();
 
176
        serverProgressBar-&gt;reset();
 
177
        clientStatusLabel-&gt;setText(tr(&quot;Client ready&quot;));
 
178
        serverStatusLabel-&gt;setText(tr(&quot;Server ready&quot;));
 
179
        startButton-&gt;setEnabled(true);
 
180
        QApplication::restoreOverrideCursor();
 
181
    }</pre>
 
182
<p /><address><hr /><div align="center">
 
183
<table width="100%" cellspacing="0" border="0"><tr class="address">
 
184
<td width="30%">Copyright &copy; 2005 <a href="trolltech.html">Trolltech</a></td>
 
185
<td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td>
 
186
<td width="30%" align="right"><div align="right">Qt 4.0.0</div></td>
 
187
</tr></table></div></address></body>
 
188
</html>