Сигнал ошибки QNetworkReply не обнаружен при потере соединения

Я загружаю файлы с удаленного сервера с помощью Qt5.5, и все работает нормально, но я не могу определить, когда QNetworkReply возвращает ошибку. На самом деле я пытаюсь проверить случай, если пользователь скачивает файл и вдруг у него пропадает интернет-соединение (а почему бы и нет :-) ). Для этого я запускаю загрузку и через несколько секунд отключаю кабель Ethernet.

Излучается ли в этом случае сигнал QNetworkReply::error(QNetworkReply::NetworkError)? Если да, то почему я не ввожу свой слот в свой код ниже?

void MyClass::download(QUrl url)
{
    QNetworkRequest request = QNetworkRequest(url);

    QNetworkReply *reply = pManager.get(request);

    // finished() is called after error(), but try both
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestError(QNetworkReply::NetworkError)));
    connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
}

void MyClass::requestError(QNetworkReply::NetworkError err)
{
    qDebug() << "error";
}

void MyClass::requestFinished()
{
    qDebug() << "finished";
}

Я также подключил менеджер доступа следующим образом:

connect(&pManager, SIGNAL(finished(QNetworkReply*)), SLOT(requestFinished(QNetworkReply*)));

Когда интернет-соединение не прерывается, я захожу в слот requestFinished(), но если интернета больше нет, я не захожу ни в один слот.

Я делаю что-то неправильно?


person IAmInPLS    schedule 10.03.2016    source источник


Ответы (1)


Ладно, неважно, я делал это неправильно. Поскольку я хочу проверить подключение к Интернету, я должен проверить доступность сети через QNetworkAccessManager, выполнив следующие действия:

QNetworkConfigurationManager manager;
pManager.setConfiguration(manager.defaultConfiguration());

connect(&pManager, SIGNAL(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)), this, SLOT(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)));

И когда Интернет сломается, я буду в соответствующем слоте.

person IAmInPLS    schedule 10.03.2016