ответ не объявлен в этой области

0

Почему этот код не работает?

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())); ^

  • 0
    Возможно, потому что red не является атрибутом MainWindow или глобально доступной переменной.
  • 0
    @Kamil Камил Климек, не нужно быть грубым. У меня есть базовые знания C ++, но я новичок в объектах и классах.
Показать ещё 1 комментарий
Теги:
scope

2 ответа

1
Лучший ответ

Вы должны объявить 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")));
...
  • 1
    Отлично! благодарю вас
1

потому что red является локальным для on_startButton_clicked(). Если вы пытаетесь загрузить и сохранить файл, ваш код не будет работать при создании файла и его закрытии при каждом readingReadyBytes(). как было предложено ABFORCE, вы должны объявить red как член. Затем вы должны подключить событие finished() из QNetworkReply к слоту, который закрывает файл.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню