Почему этот код не работает?
void MainWindow::on_startButton_clicked()
{
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
QNetworkReply *red = nam->get(QNetworkRequest(QUrl("someurl/to/file")));
QObject::connect(red, SIGNAL(readyRead()), this, SLOT(readingReadyBytes()));
QObject::connect(red, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDownloadProgress(qint64,qint64)));
}
void MainWindow::readingReadyBytes() {
QFile file("C:\\test.bin");
file.open(QIODevice::WriteOnly);
file.write(red->read(red->bytesAvailable()));
file.close();
}
QT выдает ошибку: "red" не был объявлен в этой области. File.write(red-> read (red-> bytesAvailable())); ^
Вы должны объявить red
как член класса не в функции void MainWindow::on_startButton_clicked
, тогда вы можете присвоить ему значение в on_startButton_clicked
functon, так что:
Объявить red
как член класса:
// in your MainWindow class
QNetworkReply *red;
Присвойте ему значение в методе on_startButton_clicked
:
...
red = nam->get(QNetworkRequest(QUrl("someurl/to/file")));
...
потому что red
является локальным для on_startButton_clicked()
. Если вы пытаетесь загрузить и сохранить файл, ваш код не будет работать при создании файла и его закрытии при каждом readingReadyBytes()
. как было предложено ABFORCE, вы должны объявить red
как член. Затем вы должны подключить событие finished()
из QNetworkReply
к слоту, который закрывает файл.
red
не является атрибутом MainWindow или глобально доступной переменной.