⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2004-2006 Trolltech ASA. All rights reserved.**** This file is part of the example classes of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include <QtGui>#include <QtNetwork>#include "dialog.h"static const int TotalBytes = 50 * 1024 * 1024;static const int PayloadSize = 65536;Dialog::Dialog(QWidget *parent)    : QDialog(parent){    clientProgressBar = new QProgressBar;    clientStatusLabel = new QLabel(tr("Client ready"));    serverProgressBar = new QProgressBar;    serverStatusLabel = new QLabel(tr("Server ready"));    startButton = new QPushButton(tr("&Start"));    quitButton = new QPushButton(tr("&Quit"));    connect(startButton, SIGNAL(clicked()), this, SLOT(start()));    connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));    connect(&tcpServer, SIGNAL(newConnection()),            this, SLOT(acceptConnection()));    connect(&tcpClient, SIGNAL(connected()), this, SLOT(startTransfer()));    connect(&tcpClient, SIGNAL(bytesWritten(qint64)),            this, SLOT(updateClientProgress(qint64)));    connect(&tcpClient, SIGNAL(error(QAbstractSocket::SocketError)),            this, SLOT(displayError(QAbstractSocket::SocketError)));    QHBoxLayout *buttonLayout = new QHBoxLayout;    buttonLayout->addStretch(1);    buttonLayout->addWidget(startButton);    buttonLayout->addWidget(quitButton);    QVBoxLayout *mainLayout = new QVBoxLayout;    mainLayout->addWidget(clientProgressBar);    mainLayout->addWidget(clientStatusLabel);    mainLayout->addWidget(serverProgressBar);    mainLayout->addWidget(serverStatusLabel);    mainLayout->addLayout(buttonLayout);    setLayout(mainLayout);    setWindowTitle(tr("Loopback"));}void Dialog::start(){    startButton->setEnabled(false);    QApplication::setOverrideCursor(Qt::WaitCursor);    bytesWritten = 0;    bytesReceived = 0;    while (!tcpServer.isListening() && !tcpServer.listen()) {        int ret = QMessageBox::critical(this, tr("Loopback"),                                        tr("Unable to start the test: %1.")					.arg(tcpServer.errorString()),                                        QMessageBox::Retry,					QMessageBox::Cancel);        if (ret == QMessageBox::Cancel)            return;    }    serverStatusLabel->setText(tr("Listening"));    clientStatusLabel->setText(tr("Connecting"));    tcpClient.connectToHost(QHostAddress::LocalHost, tcpServer.serverPort());}void Dialog::acceptConnection(){    tcpServerConnection = tcpServer.nextPendingConnection();    connect(tcpServerConnection, SIGNAL(readyRead()),            this, SLOT(updateServerProgress()));    connect(tcpServerConnection, SIGNAL(error(QAbstractSocket::SocketError)),            this, SLOT(displayError(QAbstractSocket::SocketError)));    serverStatusLabel->setText(tr("Accepted connection"));    tcpServer.close();}void Dialog::startTransfer(){    bytesToWrite = TotalBytes - (int)tcpClient.write(QByteArray(PayloadSize, '@'));    clientStatusLabel->setText(tr("Connected"));}void Dialog::updateServerProgress(){    bytesReceived += (int)tcpServerConnection->bytesAvailable();    tcpServerConnection->readAll();    serverProgressBar->setMaximum(TotalBytes);    serverProgressBar->setValue(bytesReceived);    serverStatusLabel->setText(tr("Received %1MB")                               .arg(bytesReceived / (1024 * 1024)));    if (bytesReceived == TotalBytes) {        tcpServerConnection->close();        startButton->setEnabled(true);        QApplication::restoreOverrideCursor();    }}void Dialog::updateClientProgress(qint64 numBytes){    bytesWritten += (int)numBytes;    if (bytesToWrite > 0)        bytesToWrite -= (int)tcpClient.write(QByteArray(qMin(bytesToWrite, PayloadSize), '@'));    clientProgressBar->setMaximum(TotalBytes);    clientProgressBar->setValue(bytesWritten);    clientStatusLabel->setText(tr("Sent %1MB")                               .arg(bytesWritten / (1024 * 1024)));}void Dialog::displayError(QAbstractSocket::SocketError socketError){    if (socketError == QTcpSocket::RemoteHostClosedError)        return;    QMessageBox::information(this, tr("Network error"),                             tr("The following error occurred: %1.")                             .arg(tcpClient.errorString()));    tcpClient.close();    tcpServer.close();    clientProgressBar->reset();    serverProgressBar->reset();    clientStatusLabel->setText(tr("Client ready"));    serverStatusLabel->setText(tr("Server ready"));    startButton->setEnabled(true);    QApplication::restoreOverrideCursor();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -