链接:http://crxzc.198424.com/dev-cpp_5.11_setup.zip
(1)主界面
(2)check box
(3)缺省路径的实现
- void Widget::on_defaultpath_pb_clicked() //缺省路径按钮按下时
- {
- QString path="c:/Users/***/Desktop/music_path/"; // '/'后面接文件的名字,即为存放在music_path路径下面的文件
- ui->keeppath_text->setText(path);
- }
(4)下载进度加载实现
- void Widget::DownLoad_Progress(qint64 byteNow,qint64 byteTotal) //下载进度
- {
- ui->downloadprogress_bar->setMaximum(byteTotal);
- ui->downloadprogress_bar->setValue(byteNow);
- }
(5)下载的实现
- void Widget::Network_ReadyToDownload() //准备下载
- {
- downloadfile->write(networkreply->readAll()); //把所有得到的响应数据写入downloadfile里面
- }
(6)网络回应的实现
- void Widget::Network_Reply() //网络回应
- {
- QFileInfo fileinfo;
- fileinfo.setFile(downloadfile->fileName());
- downloadfile->close();
- delete downloadfile;
- downloadfile=Q_NULLPTR;
- networkreply->deleteLater();
- networkreply=Q_NULLPTR;
- if(ui->openafterdownload_check->isChecked()){ //下载完成后打开勾选
- QDesktopServices::openUrl(QUrl::fromLocalFile(fileinfo.absolutePath()));
- ui->download_pb->setEnabled(true);
- }
-
- }
(7)下载按钮按下时进行
- void Widget::on_download_pb_clicked() //下载按钮按下时
- {
- QString url_text=ui->url_text->text().trimmed(); //trimmed可以去掉空格
- if(url_text.isEmpty()) //先检验是否输入
- QMessageBox::information(this,"empty!","请输入网址");
-
- QUrl url=QUrl::fromUserInput(url_text);
- if(!url.isValid()) //检查网址是否无效
- {
- QMessageBox::information(this,"invalid url!",QString("无效的网址%1\n错误信息%2").arg(url_text,url.errorString())); //打印错误信息
- return;
- }
-
- if(ui->keeppath_text->text().isEmpty()) //检查保存路径是否为空
- {
- QMessageBox::information(this,"路径错误","请输入路径");
- return;
- }
-
- QString keep_path=ui->keeppath_text->text().trimmed()+url.fileName(); //传入路径(组合)
-
- if(QFile::exists(keep_path)) //判断路径是否存在
- QFile::remove(keep_path);
-
- downloadfile=new QFile(keep_path);
-
- if(!downloadfile->open(QIODevice::WriteOnly)){
- QMessageBox::information(this,"出错了","临时文件打开失败");
- return;
- }
-
- ui->download_pb->setDisabled(true); //禁止再次点击下载(下载中)
- networkreply=networkaccessmanager.get(QNetworkRequest(url)); //获取网络请求回应
- connect(networkreply,SIGNAL(finished()),this,SLOT(Network_Reply())); //获得网络回应
- connect(networkreply,SIGNAL(readyRead()),this,SLOT(Network_ReadyToDownload())); //准备下载
- connect(networkreply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(DownLoad_Progress(qint64,qint64))); //下载进度
-
- }
pro
- QT += core gui network
-
- greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
- CONFIG += c++17
-
- # You can make your code fail to compile if it uses deprecated APIs.
- # In order to do so, uncomment the following line.
- #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
-
- SOURCES += \
- main.cpp \
- widget.cpp
-
- HEADERS += \
- widget.h
-
- FORMS += \
- widget.ui
-
- # Default rules for deployment.
- qnx: target.path = /tmp/$${TARGET}/bin
- else: unix:!android: target.path = /opt/$${TARGET}/bin
- !isEmpty(target.path): INSTALLS += target
widget.cpp
- #include "widget.h"
- #include "ui_widget.h"
- #include
- #include
- #include
- #include
- #include
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
-
- void Widget::Network_Reply() //网络回应
- {
- QFileInfo fileinfo;
- fileinfo.setFile(downloadfile->fileName());
- downloadfile->close();
- delete downloadfile;
- downloadfile=Q_NULLPTR;
- networkreply->deleteLater();
- networkreply=Q_NULLPTR;
- if(ui->openafterdownload_check->isChecked()){ //下载完成后打开勾选
- QDesktopServices::openUrl(QUrl::fromLocalFile(fileinfo.absolutePath()));
- ui->download_pb->setEnabled(true);
- }
-
- }
- void Widget::Network_ReadyToDownload() //准备下载
- {
- downloadfile->write(networkreply->readAll()); //把所有得到的响应数据写入downloadfile里面
- }
- void Widget::DownLoad_Progress(qint64 byteNow,qint64 byteTotal) //下载进度
- {
- ui->downloadprogress_bar->setMaximum(byteTotal);
- ui->downloadprogress_bar->setValue(byteNow);
- }
-
- void Widget::on_defaultpath_pb_clicked() //缺省路径按钮按下时
- {
- QString path="c:/Users/***/Desktop/music_path/"; // '/'后面接文件的名字,即为存放在music_path路径下面的文件
- ui->keeppath_text->setText(path);
- }
-
-
- void Widget::on_download_pb_clicked() //下载按钮按下时
- {
- QString url_text=ui->url_text->text().trimmed(); //trimmed可以去掉空格
- if(url_text.isEmpty()) //先检验是否输入
- QMessageBox::information(this,"empty!","请输入网址");
-
- QUrl url=QUrl::fromUserInput(url_text);
- if(!url.isValid()) //检查网址是否无效
- {
- QMessageBox::information(this,"invalid url!",QString("无效的网址%1\n错误信息%2").arg(url_text,url.errorString())); //打印错误信息
- return;
- }
-
- if(ui->keeppath_text->text().isEmpty()) //检查保存路径是否为空
- {
- QMessageBox::information(this,"路径错误","请输入路径");
- return;
- }
-
- QString keep_path=ui->keeppath_text->text().trimmed()+url.fileName(); //传入路径(组合)
-
- if(QFile::exists(keep_path)) //判断路径是否存在
- QFile::remove(keep_path);
-
- downloadfile=new QFile(keep_path);
-
- if(!downloadfile->open(QIODevice::WriteOnly)){
- QMessageBox::information(this,"出错了","临时文件打开失败");
- return;
- }
-
- ui->download_pb->setDisabled(true); //禁止再次点击下载(下载中)
- networkreply=networkaccessmanager.get(QNetworkRequest(url)); //获取网络请求回应
- connect(networkreply,SIGNAL(finished()),this,SLOT(Network_Reply())); //获得网络回应
- connect(networkreply,SIGNAL(readyRead()),this,SLOT(Network_ReadyToDownload())); //准备下载
- connect(networkreply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(DownLoad_Progress(qint64,qint64))); //下载进度,注意信号是QT自带的函数,而槽是自己定义在头文件的
-
- }
-
widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include
-
- #include
- #include
- #include
- #include
- QT_BEGIN_NAMESPACE
- namespace Ui {
- class Widget;
- }
- QT_END_NAMESPACE
-
- class Widget : public QWidget
- {
- Q_OBJECT
- private: //
- QNetworkAccessManager networkaccessmanager;
- QNetworkReply *networkreply;
- QFile *downloadfile;
- private slots:
- void Network_Reply(); //网络回应
- void Network_ReadyToDownload(); //准备下载
- void DownLoad_Progress(qint64 byteNow,qint64 byteTotal); //下载进度
- void on_defaultpath_pb_clicked();
-
- void on_download_pb_clicked();
-
- public:
- Widget(QWidget *parent = nullptr);
- ~Widget();
-
- private:
- Ui::Widget *ui;
- };
- #endif // WIDGET_H