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

📄 httpwindow.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 "httpwindow.h"HttpWindow::HttpWindow(QWidget *parent)    : QDialog(parent){    urlLineEdit = new QLineEdit("http://www.ietf.org/iesg/1rfc_index.txt");    urlLabel = new QLabel(tr("&URL:"));    urlLabel->setBuddy(urlLineEdit);    statusLabel = new QLabel(tr("Please enter the URL of a file you want to "                                "download."));    quitButton = new QPushButton(tr("Quit"));    downloadButton = new QPushButton(tr("Download"));    downloadButton->setDefault(true);    progressDialog = new QProgressDialog(this);    http = new QHttp(this);    connect(urlLineEdit, SIGNAL(textChanged(const QString &)),            this, SLOT(enableDownloadButton()));    connect(http, SIGNAL(requestFinished(int, bool)),            this, SLOT(httpRequestFinished(int, bool)));    connect(http, SIGNAL(dataReadProgress(int, int)),            this, SLOT(updateDataReadProgress(int, int)));    connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),            this, SLOT(readResponseHeader(const QHttpResponseHeader &)));    connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));    connect(downloadButton, SIGNAL(clicked()), this, SLOT(downloadFile()));    connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));    QHBoxLayout *topLayout = new QHBoxLayout;    topLayout->addWidget(urlLabel);    topLayout->addWidget(urlLineEdit);    QHBoxLayout *buttonLayout = new QHBoxLayout;    buttonLayout->addStretch(1);    buttonLayout->addWidget(downloadButton);    buttonLayout->addWidget(quitButton);    QVBoxLayout *mainLayout = new QVBoxLayout;    mainLayout->addLayout(topLayout);    mainLayout->addWidget(statusLabel);    mainLayout->addLayout(buttonLayout);    setLayout(mainLayout);    setWindowTitle(tr("HTTP"));    urlLineEdit->setFocus();}void HttpWindow::downloadFile(){    QUrl url(urlLineEdit->text());    QFileInfo fileInfo(url.path());    QString fileName = fileInfo.fileName();    if (QFile::exists(fileName)) {        QMessageBox::information(this, tr("HTTP"),                                 tr("There already exists a file called %1 in "                                    "the current directory.")                                 .arg(fileName));        return;    }    file = new QFile(fileName);    if (!file->open(QIODevice::WriteOnly)) {        QMessageBox::information(this, tr("HTTP"),                                 tr("Unable to save the file %1: %2.")                                 .arg(fileName).arg(file->errorString()));        delete file;        file = 0;        return;    }    http->setHost(url.host(), url.port() != -1 ? url.port() : 80);    if (!url.userName().isEmpty())        http->setUser(url.userName(), url.password());    httpRequestAborted = false;    httpGetId = http->get(url.path(), file);    progressDialog->setWindowTitle(tr("HTTP"));    progressDialog->setLabelText(tr("Downloading %1.").arg(fileName));    downloadButton->setEnabled(false);}void HttpWindow::cancelDownload(){    statusLabel->setText(tr("Download canceled."));    httpRequestAborted = true;    http->abort();    downloadButton->setEnabled(true);}void HttpWindow::httpRequestFinished(int requestId, bool error){    if (httpRequestAborted) {        if (file) {            file->close();            file->remove();            delete file;            file = 0;        }        progressDialog->hide();        return;    }    if (requestId != httpGetId)        return;    progressDialog->hide();    file->close();    if (error) {        file->remove();        QMessageBox::information(this, tr("HTTP"),                                 tr("Download failed: %1.")                                 .arg(http->errorString()));    } else {        QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName();        statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName));    }    downloadButton->setEnabled(true);    delete file;    file = 0;}void HttpWindow::readResponseHeader(const QHttpResponseHeader &responseHeader){    if (responseHeader.statusCode() != 200) {        QMessageBox::information(this, tr("HTTP"),                                 tr("Download failed: %1.")                                 .arg(responseHeader.reasonPhrase()));        httpRequestAborted = true;        progressDialog->hide();        http->abort();        return;    }}void HttpWindow::updateDataReadProgress(int bytesRead, int totalBytes){    if (httpRequestAborted)        return;    progressDialog->setMaximum(totalBytes);    progressDialog->setValue(bytesRead);}void HttpWindow::enableDownloadButton(){    downloadButton->setEnabled(!urlLineEdit->text().isEmpty());}

⌨️ 快捷键说明

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