блог-форум о программировании

Вы не вошли.


Deprecated: Function create_function() is deprecated in /home/user2058794/www/majestio.info/include/class/geshi.php on line 4698

#1 2017-11-20 16:31:49

Majestio
Администратор
Здесь с 2017-11-17
Сообщений: 73
Windows 10Firefox 57.0

Qt5 = Получение файла по HTTP или FTP c индикацией


Qt5 = Получение файла по HTTP или FTP c индикацией



Заголовок диалога:

#ifndef DIALOG_H
#define DIALOG_H
 
#include <QtGui>
#include <QtWidgets>
#include <QtNetwork>
 
class Dialog : public QDialog {
    Q_OBJECT
  public:
       QLineEdit *Line;
     QPushButton *Button;
    QProgressBar *Progress;
    Dialog(QWidget *parent = 0);
    ~Dialog();
  public slots:
    void SlotGet();
    void updateDataTransferProgress(qint64 readBytes, qint64 totalBytes);
};
 
#endif // DIALOG_H

Реализация:

#include "dialog.h"
 
Dialog::Dialog(QWidget *parent)
    : QDialog(parent) {
  Line = new QLineEdit();
  Button = new QPushButton("Get!");
  Progress = new QProgressBar();
  Progress->setValue(0);
  Progress->hide();
  QHBoxLayout *Top = new QHBoxLayout();
  Top->addWidget(Line,1);
  Top->addWidget(Button);
  QVBoxLayout *Out = new QVBoxLayout();
  Out->addLayout(Top);
  Out->addWidget(Progress);
  setLayout(Out);
  setFixedSize(320,82);
  connect(Button,SIGNAL(clicked()),this,SLOT(SlotGet()));
}
 
Dialog::~Dialog() {
}
 
void Dialog::SlotGet() {
  qDebug() << "Start";
  Progress->show();
  QEventLoop Loop;
  QNetworkAccessManager *Net = new QNetworkAccessManager(this);
  QNetworkRequest Req = QNetworkRequest(Line->text());
  QNetworkReply *Reply  = Net->get(Req);
  connect(Reply, SIGNAL(downloadProgress(qint64, qint64)), this, 
                       SLOT(updateDataTransferProgress(qint64, qint64)));
  connect(Reply, SIGNAL(finished()),&Loop, SLOT(quit()));
  Loop.exec();
  Progress->hide();
  QUrl Url(Line->text());
  QFileInfo FileInfo=Url.path();
  QFile File(FileInfo.fileName());
  File.open(QIODevice::WriteOnly);
  File.write(Reply->readAll());
  delete Reply;
}
 
//
// url для тестовой скачки
// http ://garr.dl.sourceforge.net/project/mingw/
// MSYS/Base/msys-core/msys-1.0.11/MSYS-1.0.11.exe
//
 
void Dialog::updateDataTransferProgress(qint64 readBytes, qint64 totalBytes) {
  Progress->setMaximum(totalBytes);
  Progress->setValue(readBytes);
}

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] CCBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.063 сек, 7 запросов выполнено - Использовано памяти: 2.18 Мбайт (Пик: 2.71 Мбайт) ]