В этом случае вы можете использовать QNetworkAccessManager
для загрузки файла, как показано ниже:
#include <QCoreApplication>
#include <QDataStream>
#include <QDir>
#include <QFile>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QStandardPaths>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QNetworkAccessManager nam;
QNetworkRequest request(QUrl("http://rfm-live-mp3-64.scdn.arkena.com/rfm.mp3"));
QString downloadDir = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
QFile file(QDir(downloadDir).absoluteFilePath("test.mp3"));
QDataStream ds(&file);
if(!file.open(QFile::WriteOnly))
return -1;
QNetworkReply *reply = nam.get(request);
QObject::connect(reply, &QNetworkReply::downloadProgress, [reply, &ds](qint64 bytesReceived, qint64 bytesTotal){
ds << reply->readAll();
qDebug()<<bytesReceived<<bytesTotal;
});
qDebug()<<reply;
return a.exec();
}
Обновление:
В следующем примере я покажу, как реализоватьмое решение в графическом интерфейсе, для этого я построил следующий интерфейс с помощью Qt Designer:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QFile>
#include <QMainWindow>
#include <QNetworkAccessManager>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void on_selectButton_clicked();
void on_startButton_clicked();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QNetworkAccessManager mNam;
QFile mFile;
QDataStream mDs;
QNetworkReply *reply;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QFile>
#include <QApplication>
#include <QNetworkReply>
#include <QFileDialog>
#include <QLineEdit>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->leUrl->setText("http://rfm-live-mp3-64.scdn.arkena.com/rfm.mp3");
ui->leOutput->setText(QDir(qApp->applicationDirPath()).absoluteFilePath("test.mp3"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
mDs << reply->readAll();
qDebug()<<bytesReceived<< bytesTotal;
}
void MainWindow::on_selectButton_clicked()
{
QString filename =QFileDialog::getSaveFileName(this, "Select ", qApp->applicationDirPath());
ui->leOutput->setText(filename);
}
void MainWindow::on_startButton_clicked()
{
mFile.setFileName(ui->leOutput->text());
mDs.setDevice(&mFile);
if(!mFile.open(QFile::WriteOnly))
return;
QNetworkRequest request(QUrl(ui->leUrl->text()));
reply = mNam.get(request);
connect(reply, &QNetworkReply::downloadProgress, this, &MainWindow::onDownloadProgress);
}
void MainWindow::on_pushButton_clicked()
{
if(reply){
reply->disconnect(SIGNAL(downloadProgress(qint64,qint64)));
reply->abort();
mFile.close();
reply->deleteLater();
}
}
Полный пример можно найти в следующем ссылка .