Всем привет. Второй день бьюсь головой и не могу наследоваться от класса QNetworkReply. Я не знаю что уже я делаю неправильно по этой причине вынужден обратится к вам всем за помощью.
myqnetworkreply.h
#ifndef MYQNETWORKREPLY_H
#define MYQNETWORKREPLY_H
#include <QNetworkReply>
#include <QObject>
QT_BEGIN_NAMESPACE
class MyQNetworkReply : public QNetworkReply
{
Q_OBJECT
public:
explicit MyQNetworkReply(QObject *parent = 0);
~MyQNetworkReply();
void downloadProgress(qint64 ist, qint64 max);
};
QT_END_NAMESPACE
#endif // MYQNETWORKREPLY_H
myqnetworkreply.cpp
#include "myqnetworkreply.h"
QT_USE_NAMESPACE
MyQNetworkReply::MyQNetworkReply(QObject *parent) : QNetworkReply(parent)
{
}
MyQNetworkReply::~MyQNetworkReply()
{
}
void MyQNetworkReply::downloadProgress(qint64 ist, qint64 max)
{
ist = 0;
max = 0;
}
В QNetworkReply есть функция downloadProgress(), собственно её мне и нужно вытащить.
Получаю вот такую ошибку: invalid new-expression of abstract class type 'MyQNetworkReply' replyL = new MyQNetworkReply(this);
Код основного класса
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//myReply = new MyQNetworkReply(this);
//replyL = new QNetworkReply(this);
NetworkManager = new QNetworkAccessManager();
process = new QProcess(this);
//connect(replyL, &QNetworkReply::downloadProgress, this, &MainWindow::downloadProgress);
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::startDownload);
connect(NetworkManager, &QNetworkAccessManager::finished, this, &MainWindow::downloadFinished);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::startDownload()
{
QUrl url("http://www.eqdrive.com.ua/files/Updates/UpdateEQDriveConfig/UpdaterEQDrive.exe");
QNetworkRequest downloadRequest;
downloadRequest.setUrl(url);
NetworkManager->get(downloadRequest);
//QNetworkReply *reply = NetworkManager->get(downloadRequest);
//connect(reply, &QNetworkReply::downloadProgress, this, &MainWindow::downloadProgress);
//connect(reply, &QNetworkReply::readyRead, this, &MainWindow::saveDownloadedFile);
}
void MainWindow::downloadFinished(QNetworkReply *reply)
{
if(reply->error())
{
qDebug() << reply->errorString();
} else {
QByteArray downloadedFile = reply->readAll();
QFile *file = new QFile("UpdaterEQDrive.exe");
if(file->open(QFile::WriteOnly))
{
file->write(downloadedFile);
file->close();
qDebug("Download Finished");
}
}
}
void MainWindow::saveDownloadedFile()
{
counter++;
qDebug() << "Save file " << counter;
//NetworkManager->get(downloadRequest);
}
void MainWindow::downloadProgress(qint64 ist, qint64 max)
{
ui->progressBar->setRange(0, max);
ui->progressBar->setValue(ist);
}
Решение проблемы оказалось простой. В функции MainWindow::startDownload()
нужно раскомментировать 2 строчки кода:
QNetworkReply *reply = NetworkManager->get(downloadRequest);
connect(reply, &QNetworkReply::downloadProgress, this, &MainWindow::downloadProgress);
и progressBar
заработает как нужно. Спасибо за это Fat-Zer
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть такой простой пример, в котором происходит использование пула на 70 потоков и создание в каждом std::promise:
я стараюсь не использовать цикл while, потому что он мне не нравитьсяНо мне нужно вызвать функцию ReceiveAndPrint и проверить ее, не равна ли она 0, после...
Заполнить одномерный массив размером 200 элементов случайными и неповторяющимися числами в диапазоне 1 – 200
Пишу сервер на С++, отправляю ему данные вида dhw6558d5fjf48dnbp5fps5tkze5f83n{\"gl\":\"123\"} а получаю это и еще 5 непонятных символов