当前位置: 首页 > news >正文

建设网站代办机构优书网

建设网站代办机构,优书网,勉费申请做网站,做视频网站需要什么条件文章目录 1. 实现高层网络操作的类2. 基于HTTP协议的网络文件下载3.源码3.1 可是化UI设计3.2 mainwindow.h3.3 mainwindow.cpp 1. 实现高层网络操作的类 Qt 网络模块提供一些类实现 OSI 7 层网络模型中高层的网络协议,如 HTTP、FTP、SNMP等,这些类主要是…

文章目录

  • 1. 实现高层网络操作的类
  • 2. 基于HTTP协议的网络文件下载
  • 3.源码
    • 3.1 可是化UI设计
    • 3.2 mainwindow.h
    • 3.3 mainwindow.cpp

1. 实现高层网络操作的类

Qt 网络模块提供一些类实现 OSI 7 层网络模型中高层的网络协议,如 HTTP、FTP、SNMP等,这些类主要是 QNetworkRequest、QNetworkReply和QNetworkAccessManager。

QNetworkRequest 类通过一个URL 地址发起网络协议请求,也保存网络请求的信息,目前支持 HTTP、FTP 和局部文件 URLs的下载或上传。
QNetworkAccessManager 类用于协调网络操作。在 QNetworkRequest 发起一个网络请求后,
QNetworkAccessManager 类负责发送网络请求,创建网络响应。

QNetworkReply 类表示网络请求的响应。由 QNetworkAccessManager 在发送一个网络请求后创建一个网络响应。QNetworkReply 提供的信号 finished()、readyRead()和 downloadProgress()可以监测网络响应的执行情况,执行相应操作。
QNetworkReply 是QIODevice 的子类,所以QNetworkReply 支持流读写功能,也支持异步或同步工作模式

2. 基于HTTP协议的网络文件下载

基于上述三个类,设计一个基于HTTP 协议的网络文件下载程序,实例程序名称 samp14_5,图 14-12 是程序运行下载文件时的界面。

在这里插入图片描述

在 URL 地址编辑框里输入一个网络文件 URL 地址,设置下载文件保存路径后,单击“下载按钮就可以开始下载文件到设置的目录下。进度条可以显示文件下载进度,下载完成后还可以用缺省的软件打开下载的文件。URL 里的 HTTP 地址可以是任何类型的文件,如 html、pdf、doc、exe 等。
实例 samp14_5主界面是基于 QMainWindow 的窗口类 MainWindow,使用 UI设计器设计界面,删除了主窗口上的工具栏和状态栏。MainWindow 类的定义如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include    <QMainWindow>
#include    <QNetworkAccessManager>
#include    <QNetworkReply>
#include    <QFile>
#include    <QUrl>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECT
private:QNetworkAccessManager networkManager;//网络管理QNetworkReply *reply;   //网络响应QFile *downloadedFile;//下载保存的临时文件
public:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:
//自定义槽函数void on_finished();void on_readyRead();void on_downloadProgress(qint64 bytesRead, qint64 totalBytes);
...private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

要下载文件,先在窗口上的 URL编辑框里输入下载地址(可以使用 Ctrl+V 组合键粘贴URL地址),再设置下载文件保存的目录。单击“缺省路径”按钮会在程序的当前目录下创建一个临时文件夹,代码如下:

void MainWindow::on_btnDefaultPath_clicked()
{//缺省路径  按钮QString  curPath=QDir::currentPath();QDir    dir(curPath);QString  sub="temp";dir.mkdir(sub);ui->editPath->setText(curPath+"/"+sub+"/");
}

输入这些设置后,单击“下载”按钮开始下载过程,“下载”按钮的响应代码如下:

void MainWindow::on_btnDownload_clicked()
{//开始下载 按钮QString urlSpec = ui->editURL->text().trimmed();if (urlSpec.isEmpty()){QMessageBox::information(this, "错误","请指定需要下载的URL");return;}QUrl newUrl = QUrl::fromUserInput(urlSpec);//URL地址if (!newUrl.isValid()){QMessageBox::information(this, "错误",QString("无效URL: %1 \n 错误信息: %2").arg(urlSpec, newUrl.errorString()));return;}QString tempDir =ui->editPath->text().trimmed();//临时目录if (tempDir.isEmpty()){QMessageBox::information(this, tr("错误"), "请指定保存下载文件的目录");return;}QString fullFileName =tempDir+newUrl.fileName(); //文件名if (QFile::exists(fullFileName))QFile::remove(fullFileName);downloadedFile =new QFile(fullFileName);//创建临时文件if (!downloadedFile->open(QIODevice::WriteOnly)){QMessageBox::information(this, tr("错误"),"临时文件打开错误");return;}ui->btnDownload->setEnabled(false);//发送玩过请求,创建网络响应reply = networkManager.get(QNetworkRequest(newUrl));connect(reply, SIGNAL(finished()), this, SLOT(on_finished()));connect(reply, SIGNAL(readyRead()), this, SLOT(on_readyRead()));connect(reply, SIGNAL(downloadProgress(qint64,qint64)),this, SLOT(on_downloadProgress(qint64,qint64)));
}

代码在读取 URL 地址后,将其转换为一个 QUrl 类变量 newUrl,并检查其有效性,再检查临时文件目录,创建临时文件 downloadedFile。

这些准备好之后,用QNetworkAccessManager 发布网络请求,请求下载URL 地址表示的文件,并创建网络响应,关键代码为:

reply = networkManager.get(QNetworkRequest(newUrl));

reply 为网络响应,将其 3 个信号与相关的自定义槽函数相关联,实现相应的操作。这3 个槽函数的代码如下:

void MainWindow::on_readyRead()
{//读取下载的数据downloadedFile->write(reply->readAll());
}void MainWindow::on_downloadProgress(qint64 bytesRead, qint64 totalBytes)
{//下载进程ui->progressBar->setMaximum(totalBytes);ui->progressBar->setValue(bytesRead);
}void MainWindow::on_finished()
{//网络响应结束QFileInfo fileInfo;fileInfo.setFile(downloadedFile->fileName());downloadedFile->close();delete downloadedFile;downloadedFile = Q_NULLPTR;reply->deleteLater(); //reply = Q_NULLPTR;if (ui->checkOpen->isChecked())//打开下载的文件QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.absoluteFilePath()));ui->btnDownload->setEnabled(true);
}

在缓冲区有新下载的数据等待读取时,会发射 readyRead()信号,槽函数 on_readyRead()读取下载缓冲区的数据到临时文件。
downloadProgress()是表示网络操作进度的信号,传递 bytesRead 和 totalBytes 两个参数,表示已读取字节数和总的字节数;on_downloadProgress()槽函数将这两个参数用于进度条的显示,可以显示下载进度。
finished()信号在下载结束后发射,槽函数 on_finished()的功能是关闭临时文件,删除文件变量和网络响应变量。然后用 QDesktopServices:openUrl()函数调用缺省的应用软件打开下载的文件,例如,如果下载的是一个 PDF 文件,会自动用相关联的 PDF 阅读器软件打开此文件。

3.源码

3.1 可是化UI设计

在这里插入图片描述

3.2 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include    <QMainWindow>
#include    <QNetworkAccessManager>
#include    <QNetworkReply>
#include    <QFile>
#include    <QUrl>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECT
private:QNetworkAccessManager networkManager;//网络管理QNetworkReply *reply;   //网络响应QFile *downloadedFile;//下载保存的临时文件
public:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:
//自定义槽函数void on_finished();void on_readyRead();void on_downloadProgress(qint64 bytesRead, qint64 totalBytes);void on_btnDefaultPath_clicked();void on_btnDownload_clicked();void on_editURL_textChanged(const QString &arg1);private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

3.3 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include    <QDir>
#include    <QMessageBox>
#include    <QDesktopServices>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);ui->editURL->setClearButtonEnabled(true);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_finished()
{//网络响应结束QFileInfo fileInfo;fileInfo.setFile(downloadedFile->fileName());downloadedFile->close();delete downloadedFile;downloadedFile = Q_NULLPTR;reply->deleteLater(); //reply = Q_NULLPTR;if (ui->checkOpen->isChecked())//打开下载的文件QDesktopServices::openUrl(QUrl::fromLocalFile(fileInfo.absoluteFilePath()));ui->btnDownload->setEnabled(true);
}void MainWindow::on_readyRead()
{//读取下载的数据downloadedFile->write(reply->readAll());
}void MainWindow::on_downloadProgress(qint64 bytesRead, qint64 totalBytes)
{//下载进程ui->progressBar->setMaximum(totalBytes);ui->progressBar->setValue(bytesRead);
}void MainWindow::on_btnDefaultPath_clicked()
{//缺省路径  按钮QString  curPath=QDir::currentPath();QDir    dir(curPath);QString  sub="temp";dir.mkdir(sub);ui->editPath->setText(curPath+"/"+sub+"/");
}void MainWindow::on_btnDownload_clicked()
{//开始下载 按钮QString urlSpec = ui->editURL->text().trimmed();if (urlSpec.isEmpty()){QMessageBox::information(this, "错误","请指定需要下载的URL");return;}QUrl newUrl = QUrl::fromUserInput(urlSpec);//URL地址if (!newUrl.isValid()){QMessageBox::information(this, "错误",QString("无效URL: %1 \n 错误信息: %2").arg(urlSpec, newUrl.errorString()));return;}QString tempDir =ui->editPath->text().trimmed();//临时目录if (tempDir.isEmpty()){QMessageBox::information(this, tr("错误"), "请指定保存下载文件的目录");return;}QString fullFileName =tempDir+newUrl.fileName(); //文件名if (QFile::exists(fullFileName))QFile::remove(fullFileName);downloadedFile =new QFile(fullFileName);//创建临时文件if (!downloadedFile->open(QIODevice::WriteOnly)){QMessageBox::information(this, tr("错误"),"临时文件打开错误");return;}ui->btnDownload->setEnabled(false);//发送玩过请求,创建网络响应reply = networkManager.get(QNetworkRequest(newUrl));connect(reply, SIGNAL(finished()), this, SLOT(on_finished()));connect(reply, SIGNAL(readyRead()), this, SLOT(on_readyRead()));connect(reply, SIGNAL(downloadProgress(qint64,qint64)),this, SLOT(on_downloadProgress(qint64,qint64)));
}void MainWindow::on_editURL_textChanged(const QString &arg1)
{Q_UNUSED(arg1);ui->progressBar->setMaximum(100);ui->progressBar->setValue(0);
}
http://www.hrbkazy.com/news/21550.html

相关文章:

  • php网站建设素材seo和网络推广有什么区别
  • 门户网站 cms推广方式营销方案
  • 湖州 网站建设seo优化广告
  • 关于动物自己做的网站软文推广例子
  • 页面设计的像胶囊怎么形容深圳网站设计实力乐云seo
  • 有什么做家常菜的网站网址收录平台
  • html网站开发心得体会亚马逊查关键词排名工具
  • 怎样进行seo推广seo有哪些优化工具
  • 网站公司建设个服务号多少钱市场营销在线课程
  • 有哪些网站做任务有佣金seo怎么优化关键词排名
  • 汽车网站正在建设中模板中国seo排行榜
  • 做网络的网站很重要吗网站开发的一般流程
  • 做网站策划用什么软件2023年5月份病毒感染情况
  • 360网站seo怎么做厦门网站到首页排名
  • 芜湖网站建设推广公司网站搜索引擎优化工具
  • 自动做网页的网站软文营销的本质
  • 做一个二手网站怎么做百度一下首页百度一下知道
  • 网站建设推荐中企动力如何做谷歌优化
  • 做爰xo的视频网站试看老司机们用的关键词有哪些
  • 口碑好的聊城网站建设软件排名工具
  • 门户网站应该怎么做推广软文300字
  • html建站免费建立个人网站
  • 豆各庄做网站的公司seo营销外包公司
  • 网站公安备案流程百度网站提交
  • 商城网站建设制作设计软文营销文章
  • 首都航空公司官方网站谷歌seo和百度seo
  • 网站建设有什么品牌宁波网络推广优化公司
  • tv电视盒子企业网站模板软文营销定义
  • 网站建设客户在哪里找百度投诉中心
  • 顾村网站建设seo免费优化网址软件