当前位置: 首页>>代码示例>>C++>>正文


C++ QNetworkReply::close方法代码示例

本文整理汇总了C++中QNetworkReply::close方法的典型用法代码示例。如果您正苦于以下问题:C++ QNetworkReply::close方法的具体用法?C++ QNetworkReply::close怎么用?C++ QNetworkReply::close使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在QNetworkReply的用法示例。


在下文中一共展示了QNetworkReply::close方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: replyFinished

void SearchEnginesManager::replyFinished()
{
    qApp->restoreOverrideCursor();

    QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
    if (!reply) {
        return;
    }

    if (reply->error() != QNetworkReply::NoError) {
        reply->close();
        reply->deleteLater();
        return;
    }

    OpenSearchReader reader;
    OpenSearchEngine* engine = reader.read(reply);
    engine->setNetworkAccessManager(mApp->networkManager());

    reply->close();
    reply->deleteLater();

    if (checkEngine(engine)) {
        addEngine(engine);
        QMessageBox::information(0, tr("Search Engine Added"), tr("Search Engine \"%1\" has been successfully added.").arg(engine->name()));
    }
}
开发者ID:eyome,项目名称:QupZilla,代码行数:27,代码来源:searchenginesmanager.cpp

示例2: parseRipperDb

void RipperCC::parseRipperDb()
{
    _timer->start();

    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());

    // Occurs error
    if(reply->error() != QNetworkReply::NoError) {
        qDebug() << "RippperCC Plugin:" << reply->errorString();
        reply->close();
        return;
    }

    // No errors
    QByteArray ba = reply->readAll();

    QVariantMap ripperMap = QJsonWrapper::parseJson(ba).toMap();
    if (!ripperMap.contains(QLatin1String("rippers")))
        return;

    QVariantList ripperList = ripperMap.value(QLatin1String("rippers")).toList();
    if (ripperList.isEmpty())
        return;

    _rippers.clear();
    foreach (const QVariant &item, ripperList) {
        Ripper ripper;
        ripper.jid = item.toMap().value(QLatin1String("jabber")).toString();
        ripper.url = item.toMap().value(QLatin1String("link")).toString();
        _rippers << ripper;
    }
开发者ID:psi-plus,项目名称:plugins,代码行数:31,代码来源:rippercc.cpp

示例3: alwaysCacheRequest

void tst_QNetworkAccessManager::alwaysCacheRequest()
{
    QNetworkAccessManager manager;

    QNetworkRequest req;
    req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache);
    QNetworkReply *reply = manager.get(req);
    reply->close();
    delete reply;
}
开发者ID:2gis,项目名称:2gisqt5android,代码行数:10,代码来源:tst_qnetworkaccessmanager.cpp

示例4: onDownloadFinished

void DownloadHelper::onDownloadFinished()
{
   QNetworkReply* pReply = static_cast<QNetworkReply*>(sender());

   if (!handleReplyError(pReply))
      return;

   writeReply(pReply, fileName_);

   downloadFinished(fileName_);

   pReply->close();
   pReply->deleteLater();
   deleteLater();
}
开发者ID:Brackets,项目名称:rstudio,代码行数:15,代码来源:DesktopDownloadHelper.cpp

示例5: html

void
MainWindow::htmlIconDownloaded()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    QString url = reply->url().toString();
    QString savePath = reply->request().attribute(QNetworkRequest::User).toString();
    if (reply->error())
    {
        reply->close();
        qDebug() << "Couldn't get an icon or HTML for " << url << " so I'm giving up: " << reply->errorString();
        return;
    }

    QString html(reply->readAll());
    QRegExp reg("<link (rel=\"([^\"]+)\")?\\s*(type=\"([^\"]+)\")?\\s*(href=\"([^\"]+)\")?\\s*/?>");
    QString iconPath = "";
    // Look for the first match
    int pos = 0;
    while ((pos = reg.indexIn(html, pos)) != -1)
    {
        if (reg.cap(2).endsWith("icon"))
        {
            iconPath = reg.cap(6);
            break;
        }

        pos += reg.matchedLength();
    }

    if (iconPath.isEmpty())
    {
        qDebug() << "Couldn't find an icon in " << url;
        return;
    }

    if (!iconPath.startsWith("http"))
    {
        qDebug() << "Path was wrong, fixing";
        iconPath= "https://" + QUrl(url).host() + "/" + iconPath;
    }
    qDebug() << "Going to fetch " << iconPath;

    QNetworkRequest req = QNetworkRequest(QUrl(iconPath));
    req.setAttribute(QNetworkRequest::User, QVariant(savePath));
    QNetworkReply *rep = pManager->get(req);
    connect(rep, SIGNAL(finished()),
            this, SLOT(iconDownloaded()));
}
开发者ID:Entomologist,项目名称:entomologist,代码行数:48,代码来源:MainWindow.cpp

示例6: translate

void CBaiduTranslater::translate(const QString &src, const QString from, const QString to)
{
    //if (m_networkAccessManager == nullptr)
        //return;

    /* create query url */
    QUrl url(m_url);
    QUrlQuery query;
    query.addQueryItem("from", from);
    query.addQueryItem("to", to);
    query.addQueryItem("client_id", m_client_id);
    query.addQueryItem("q", src);
    url.setQuery(query);

    // create http request header
    QNetworkRequest request(url);

    // send GET request to get result
    QNetworkReply *reply = m_networkAccessManager->get(request);

    /* return data */
    connect(reply, &QNetworkReply::readyRead, [=]{
        QByteArray data = reply->readAll();
        //qDebug(data);
        CBaiduTranslateResult result = decodeJsonData(data);

        emit finished(result);

        if (isCli)
        {
            tmpResult = result;
            returnResult();
        }

        reply->close();
    });

    /* finish request */
    connect(reply, &QNetworkReply::finished, [=]{
        reply->deleteLater();
    });

    /* error */
    auto pError = static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error);
    connect(reply, pError, [=](QNetworkReply::NetworkError){
        reply->deleteLater();
    });
}
开发者ID:xuzhuoyi,项目名称:LBTrans,代码行数:48,代码来源:cbaidutranslater.cpp

示例7: sender

void
YouTubeAuthenticator::authFinished()
{
    QNetworkReply *reply = static_cast<QNetworkReply *>( sender() );
    QByteArray data = reply->readAll();

    if( setAuthData( data ) )
        m_service->m_state = AuthFinish;

    disconnect( reply, SIGNAL( finished() ), this, SLOT( authFinished() ) );
    disconnect( reply, SIGNAL( error( QNetworkReply::NetworkError ) ),
                m_service, SLOT( networkError( QNetworkReply::NetworkError ) ) );

    reply->close();
    reply->deleteLater();
}
开发者ID:ARYANKAUSHIK,项目名称:old,代码行数:16,代码来源:YouTubeAuthenticator.cpp

示例8: slotNotify

void Toasty::slotNotify(Snore::Notification notification)
{
    QString key = settingsValue(ToastyConstants::DeviceID).toString();
    if (key.isEmpty()) {
        return;
    }
    QNetworkRequest request(QUrl::fromUserInput(QLatin1String("http://api.supertoasty.com/notify/") + key));
    QHttpMultiPart *mp = new QHttpMultiPart(QHttpMultiPart::FormDataType);

    QHttpPart title;
    title.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QLatin1String("form-data; name=\"title\"")));
    title.setBody(notification.title().toUtf8().constData());
    mp->append(title);

    QHttpPart text;
    text.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QLatin1String("form-data; name=\"text\"")));
    text.setBody(notification.text().toUtf8().constData());
    mp->append(text);

    QHttpPart app;
    app.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QLatin1String("form-data; name=\"sender\"")));
    app.setBody(notification.application().name().toUtf8().constData());
    mp->append(app);

    QHttpPart icon;

    icon.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QLatin1String("form-data; name=\"image\"; filename=\"") + notification.icon().localUrl(QSize(128, 128)) + QLatin1Char('"')));
    icon.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(QLatin1String("image/png")));
    QFile *file = new QFile(notification.icon().localUrl(QSize(128, 128)));
    file->open(QIODevice::ReadOnly);
    icon.setBodyDevice(file);
    mp->append(icon);

    QNetworkReply *reply =  m_manager.post(request, mp);
    mp->setParent(reply);
    file->setParent(reply);

    connect(reply, &QNetworkReply::finished, [reply]() {
        qCDebug(SNORE) << reply->error();
        qCDebug(SNORE) << reply->readAll();
        reply->close();
        reply->deleteLater();
    });

}
开发者ID:KDE,项目名称:snorenotify,代码行数:45,代码来源:toasty.cpp

示例9: validateRemoteUri

bool QgsGlobePluginDialog::validateRemoteUri( const QString &uri, QString &errMsg ) const
{
  QUrl url( uri );
  QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance();
  QNetworkReply *reply = nullptr;

  while ( true )
  {
    QNetworkRequest req( url );
    req.setRawHeader( "User-Agent", "Wget/1.13.4" );
    reply = nam->get( req );
    QTimer timer;
    QEventLoop loop;
    QObject::connect( &timer, SIGNAL( timeout() ), &loop, SLOT( quit() ) );
    QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );
    timer.setSingleShot( true );
    timer.start( 500 );
    loop.exec();
    if ( reply->isRunning() )
    {
      // Timeout
      reply->close();
      delete reply;
      errMsg = tr( "Timeout" );
      return false;
    }

    QUrl redirectUrl = reply->attribute( QNetworkRequest::RedirectionTargetAttribute ).toUrl();
    if ( redirectUrl.isValid() && url != redirectUrl )
    {
      delete reply;
      url = redirectUrl;
    }
    else
    {
      break;
    }
  }

  errMsg = reply->error() == QNetworkReply::NoError ? QString() : reply->errorString();
  delete reply;
  return errMsg.isEmpty();
}
开发者ID:AlisterH,项目名称:Quantum-GIS,代码行数:43,代码来源:qgsglobeplugindialog.cpp

示例10: imageObtained

void OpenSearchEngine::imageObtained()
{
    QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());

    if (!reply) {
        return;
    }

    QByteArray response = reply->readAll();

    reply->close();
    reply->deleteLater();

    if (response.isEmpty()) {
        return;
    }

    m_image.loadFromData(response);
    emit imageChanged();
}
开发者ID:Acidburn0zzz,项目名称:qupzilla,代码行数:20,代码来源:opensearchengine.cpp

示例11: onDownloadFinished

void DownloadHelper::onDownloadFinished()
{
   QNetworkReply* pReply = static_cast<QNetworkReply*>(sender());

   if (pReply->error() != QNetworkReply::NoError)
   {
      showWarning(NULL,
                  QString::fromUtf8("Download Failed"),
                  QString::fromUtf8("An error occurred during download:\n\n")
                  + pReply->errorString());
      return;
   }

   QFile file(fileName_);
   if (file.open(QFile::ReadWrite))
      file.write(pReply->readAll());

   downloadFinished(fileName_);

   pReply->close();
   pReply->deleteLater();
   deleteLater();
}
开发者ID:Swissbanker,项目名称:rstudio,代码行数:23,代码来源:DesktopDownloadHelper.cpp

示例12: logoBuffer

// Callback from fetchIcon
void
MainWindow::iconDownloaded()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    QString savePath = reply->request().attribute(QNetworkRequest::User).toString();
    int wasRedirected = reply->request().attribute((QNetworkRequest::Attribute)(QNetworkRequest::User+1)).toInt();
    QString username = reply->request().attribute((QNetworkRequest::Attribute)(QNetworkRequest::User+2)).toString();
    QString password = reply->request().attribute((QNetworkRequest::Attribute)(QNetworkRequest::User+3)).toString();

    QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

    if (!redirect.toUrl().isEmpty() && !wasRedirected)
    {
        qDebug() << "Was redirected to " << redirect.toUrl();
        reply->deleteLater();
        QUrl redir = redirect.toUrl();
        if (!username.isEmpty())
        {
            redir.setUserName(username);
            redir.setPassword(password);
        }
        QNetworkRequest req = QNetworkRequest(redir);
        req.setAttribute(QNetworkRequest::User, QVariant(savePath));
        req.setAttribute((QNetworkRequest::Attribute)(QNetworkRequest::User+1), QVariant(1));
        QNetworkReply *rep = pManager->get(req);
        connect(rep, SIGNAL(finished()),
                this, SLOT(iconDownloaded()));
        return;
    }

    qDebug() << "Icon downloaded";
    if (reply->error())
    {
        reply->close();
        qDebug() << "Couldn't get icon";
        fetchHTMLIcon(reply->url().toString(), savePath);
        return;
    }

    QByteArray logoData = reply->readAll();
    // The favicon can be in various formats, so convert it to something
    // we know we can safely display
    QBuffer logoBuffer(&logoData);
    logoBuffer.open(QIODevice::ReadOnly);
    QImageReader reader(&logoBuffer);
    QSize iconSize(16, 16);
    if(reader.canRead())
    {
        while((reader.imageCount() > 1) && (reader.currentImageRect() != QRect(0, 0, 16, 16)))
        {
            if (!reader.jumpToNextImage())
                   break;
        }

        reader.setScaledSize(iconSize);
        const QImage icon = reader.read();
        if (icon.format() == QImage::Format_Invalid)
        {
            fetchHTMLIcon(reply->url().toString(), savePath);
        }
        else
        {
            icon.save(savePath, "PNG");
            QFileInfo info(savePath);
            int tabIndex = compareTabName(info.baseName());
            if (tabIndex != -1)
                ui->trackerTab->setTabIcon(tabIndex, QIcon(QPixmap::fromImage(icon)));
        }
    }
    else
    {
        qDebug() << "Invalid image";
        fetchHTMLIcon(reply->url().toString(), savePath);
    }

    logoBuffer.close();
    reply->close();
}
开发者ID:Entomologist,项目名称:entomologist,代码行数:79,代码来源:MainWindow.cpp

示例13: onRetroArchUpdateDownloadFinished

void MainWindow::onRetroArchUpdateDownloadFinished()
{
   QNetworkReply *reply = m_updateReply.data();
   QNetworkReply::NetworkError error;
   int code;

   m_updateProgressDialog->cancel();

   /* At least on Linux, the progress dialog will refuse to hide itself and will stay on screen in a corrupted way if we happen to show an error message in this function. processEvents() will sometimes fix it, other times not... seems random. */
   qApp->processEvents();

   if (!reply)
      return;

   error = reply->error();
   code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

   if (m_updateFile.isOpen())
      m_updateFile.close();

   if (code != 200)
   {
      emit showErrorMessageDeferred(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_NETWORK_ERROR)) + ": HTTP Code " + QString::number(code));
      RARCH_ERR("[Qt]: RetroArch update failed with HTTP status code: %d\n", code);
      reply->disconnect();
      reply->abort();
      reply->deleteLater();
      return;
   }

   if (error == QNetworkReply::NoError)
   {
      int index = m_updateFile.fileName().lastIndexOf(PARTIAL_EXTENSION);
      QString newFileName = m_updateFile.fileName().left(index);
      QFile newFile(newFileName);

      /* rename() requires the old file to be deleted first if it exists */
      if (newFile.exists() && !newFile.remove())
         RARCH_ERR("[Qt]: RetroArch update finished, but old file could not be deleted.\n");
      else
      {
         if (m_updateFile.rename(newFileName))
         {
            RARCH_LOG("[Qt]: RetroArch update finished downloading successfully.\n");
            emit extractArchiveDeferred(newFileName);
         }
         else
         {
            RARCH_ERR("[Qt]: RetroArch update finished, but temp file could not be renamed.\n");
            emit showErrorMessageDeferred(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_COULD_NOT_RENAME_FILE));
         }
      }
   }
   else
   {
      QByteArray errorArray = reply->errorString().toUtf8();
      const char *errorData = errorArray.constData();

      RARCH_ERR("[Qt]: RetroArch update ended prematurely: %s\n", errorData);
      emit showErrorMessageDeferred(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_NETWORK_ERROR)) + ": Code " + QString::number(code) + ": " + errorData);
   }

   reply->disconnect();
   reply->close();
   reply->deleteLater();
}
开发者ID:gouchi,项目名称:RetroArch,代码行数:66,代码来源:updateretroarch.cpp

示例14: onWeatherForecastReply

void WeatherWorker::onWeatherForecastReply()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    bool redirection = false;

    if(reply->error() != QNetworkReply::NoError || statusCode != 200) {//200 is normal status
        //qDebug() << "weather forecast request error:" << reply->error() << ", statusCode=" << statusCode;
        if (statusCode == 301 || statusCode == 302) {//redirect
            QVariant redirectionUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
            //qDebug() << "redirectionUrl=" << redirectionUrl.toString();
            redirection = AccessDedirectUrl(redirectionUrl.toString(), WeatherType::Type_Forecast);//AccessDedirectUrl(reply->rawHeader("Location"));
            reply->close();
            reply->deleteLater();
        }
        if (!redirection) {
            emit responseFailure(statusCode);
        }
        return;
    }

    QByteArray ba = reply->readAll();
    //QString reply_content = QString::fromUtf8(ba);
    reply->close();
    reply->deleteLater();
    //qDebug() << "weather forecast size: " << ba.size();

    QJsonParseError err;
    QJsonDocument jsonDocument = QJsonDocument::fromJson(ba, &err);
    if (err.error != QJsonParseError::NoError) {// Json type error
        qDebug() << "Json type error";
        emit responseFailure(0);
        return;
    }
    if (jsonDocument.isNull() || jsonDocument.isEmpty()) {
        qDebug() << "Json null or empty!";
        emit responseFailure(0);
        return;
    }

    QJsonObject jsonObject = jsonDocument.object();
    //qDebug() << "jsonObject" << jsonObject;

    QJsonObject mainObj = jsonObject.value("KylinWeather").toObject();
    QJsonObject forecastObj = mainObj.value("forecast").toObject();
    QJsonObject lifestyleObj = mainObj.value("lifestyle").toObject();

    m_preferences->forecast0.forcast_date = forecastObj.value("forcast_date0").toString();
    m_preferences->forecast0.cond_code_d = forecastObj.value("cond_code_d0").toString();
    m_preferences->forecast0.cond_code_n = forecastObj.value("cond_code_n0").toString();
    m_preferences->forecast0.cond_txt_d = forecastObj.value("cond_txt_d0").toString();
    m_preferences->forecast0.cond_txt_n = forecastObj.value("cond_txt_n0").toString();
    m_preferences->forecast0.hum = forecastObj.value("hum0").toString();
    m_preferences->forecast0.mr_ms = forecastObj.value("mr_ms0").toString();
    m_preferences->forecast0.pcpn = forecastObj.value("pcpn0").toString();
    m_preferences->forecast0.pop = forecastObj.value("pop0").toString();
    m_preferences->forecast0.pres = forecastObj.value("pres0").toString();
    m_preferences->forecast0.sr_ss = forecastObj.value("sr_ss0").toString();
    m_preferences->forecast0.tmp_max = forecastObj.value("tmp_max0").toString();
    m_preferences->forecast0.tmp_min = forecastObj.value("tmp_min0").toString();
    m_preferences->forecast0.uv_index = forecastObj.value("uv_index0").toString();
    m_preferences->forecast0.vis = forecastObj.value("vis0").toString();
    m_preferences->forecast0.wind_deg = forecastObj.value("wind_deg0").toString();
    m_preferences->forecast0.wind_dir = forecastObj.value("wind_dir0").toString();
    m_preferences->forecast0.wind_sc = forecastObj.value("wind_sc0").toString();
    m_preferences->forecast0.wind_spd = forecastObj.value("wind_spd0").toString();

    m_preferences->forecast1.forcast_date = forecastObj.value("forcast_date1").toString();
    m_preferences->forecast1.cond_code_d = forecastObj.value("cond_code_d1").toString();
    m_preferences->forecast1.cond_code_n = forecastObj.value("cond_code_n1").toString();
    m_preferences->forecast1.cond_txt_d = forecastObj.value("cond_txt_d1").toString();
    m_preferences->forecast1.cond_txt_n = forecastObj.value("cond_txt_n1").toString();
    m_preferences->forecast1.hum = forecastObj.value("hum1").toString();
    m_preferences->forecast1.mr_ms = forecastObj.value("mr_ms1").toString();
    m_preferences->forecast1.pcpn = forecastObj.value("pcpn1").toString();
    m_preferences->forecast1.pop = forecastObj.value("pop1").toString();
    m_preferences->forecast1.pres = forecastObj.value("pres1").toString();
    m_preferences->forecast1.sr_ss = forecastObj.value("sr_ss1").toString();
    m_preferences->forecast1.tmp_max = forecastObj.value("tmp_max1").toString();
    m_preferences->forecast1.tmp_min = forecastObj.value("tmp_min1").toString();
    m_preferences->forecast1.uv_index = forecastObj.value("uv_index1").toString();
    m_preferences->forecast1.vis = forecastObj.value("vis1").toString();
    m_preferences->forecast1.wind_deg = forecastObj.value("wind_deg1").toString();
    m_preferences->forecast1.wind_dir = forecastObj.value("wind_dir1").toString();
    m_preferences->forecast1.wind_sc = forecastObj.value("wind_sc1").toString();
    m_preferences->forecast1.wind_spd = forecastObj.value("wind_spd1").toString();

    m_preferences->forecast2.forcast_date = forecastObj.value("forcast_date2").toString();
    m_preferences->forecast2.cond_code_d = forecastObj.value("cond_code_d2").toString();
    m_preferences->forecast2.cond_code_n = forecastObj.value("cond_code_n2").toString();
    m_preferences->forecast2.cond_txt_d = forecastObj.value("cond_txt_d2").toString();
    m_preferences->forecast2.cond_txt_n = forecastObj.value("cond_txt_n2").toString();
    m_preferences->forecast2.hum = forecastObj.value("hum2").toString();
    m_preferences->forecast2.mr_ms = forecastObj.value("mr_ms2").toString();
    m_preferences->forecast2.pcpn = forecastObj.value("pcpn2").toString();
    m_preferences->forecast2.pop = forecastObj.value("pop2").toString();
    m_preferences->forecast2.pres = forecastObj.value("pres2").toString();
    m_preferences->forecast2.sr_ss = forecastObj.value("sr_ss2").toString();
    m_preferences->forecast2.tmp_max = forecastObj.value("tmp_max2").toString();
    m_preferences->forecast2.tmp_min = forecastObj.value("tmp_min2").toString();
//.........这里部分代码省略.........
开发者ID:UbuntuKylin,项目名称:indicator-china-weather,代码行数:101,代码来源:weatherworker.cpp

示例15: onWeatherObserveReply

void WeatherWorker::onWeatherObserveReply()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    bool redirection = false;

    if(reply->error() != QNetworkReply::NoError || statusCode != 200) {//200 is normal status
        //qDebug() << "weather request error:" << reply->error() << ", statusCode=" << statusCode;
        if (statusCode == 301 || statusCode == 302) {//redirect
            QVariant redirectionUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
            //qDebug() << "redirectionUrl=" << redirectionUrl.toString();
            redirection = AccessDedirectUrl(redirectionUrl.toString(), WeatherType::Type_Observe);//AccessDedirectUrl(reply->rawHeader("Location"));
            reply->close();
            reply->deleteLater();
        }
        if (!redirection) {
            emit responseFailure(statusCode);
        }
        return;
    }

    QByteArray ba = reply->readAll();
    //QString reply_content = QString::fromUtf8(ba);
    reply->close();
    reply->deleteLater();
    //qDebug() << "weather observe size: " << ba.size();

    QJsonParseError err;
    QJsonDocument jsonDocument = QJsonDocument::fromJson(ba, &err);
    if (err.error != QJsonParseError::NoError) {// Json type error
        qDebug() << "Json type error";
        emit responseFailure(0);
        return;
    }
    if (jsonDocument.isNull() || jsonDocument.isEmpty()) {
        qDebug() << "Json null or empty!";
        emit responseFailure(0);
        return;
    }

    QJsonObject jsonObject = jsonDocument.object();
    //qDebug() << "jsonObject" << jsonObject;

    QJsonObject mainObj = jsonObject.value("KylinWeather").toObject();
    QJsonObject airObj = mainObj.value("air").toObject();
    QJsonObject weatherObj = mainObj.value("weather").toObject();
    //qDebug() << "airObj" << airObj;

    m_preferences->air.id = weatherObj.value("id").toString();
    m_preferences->air.aqi = airObj.value("aqi").toString();
    m_preferences->air.qlty = airObj.value("qlty").toString();
    m_preferences->air.main = airObj.value("main").toString();
    m_preferences->air.pm25 = airObj.value("pm25").toString();
    m_preferences->air.pm10 = airObj.value("pm10").toString();
    m_preferences->air.no2 = airObj.value("no2").toString();
    m_preferences->air.so2 = airObj.value("so2").toString();
    m_preferences->air.co = airObj.value("co").toString();
    m_preferences->air.o3 = airObj.value("o3").toString();

    m_preferences->weather.id = weatherObj.value("id").toString();
    m_preferences->weather.city = weatherObj.value("location").toString();
    m_preferences->weather.updatetime = weatherObj.value("update_loc").toString();
    m_preferences->weather.air = QString("%1(%2)").arg(airObj.value("aqi").toString()).arg(airObj.value("qlty").toString());
    m_preferences->weather.cloud = weatherObj.value("cloud").toString();
    m_preferences->weather.cond_code = weatherObj.value("cond_code").toString();
    m_preferences->weather.cond_txt = weatherObj.value("cond_txt").toString();
    m_preferences->weather.fl = weatherObj.value("fl").toString();
    m_preferences->weather.hum = weatherObj.value("hum").toString();
    m_preferences->weather.pcpn = weatherObj.value("pcpn").toString();
    m_preferences->weather.pres = weatherObj.value("pres").toString();
    m_preferences->weather.tmp = weatherObj.value("tmp").toString();
    m_preferences->weather.vis = weatherObj.value("vis").toString();
    m_preferences->weather.wind_deg = weatherObj.value("wind_deg").toString();
    m_preferences->weather.wind_dir = weatherObj.value("wind_dir").toString();
    m_preferences->weather.wind_sc = weatherObj.value("wind_sc").toString();
    m_preferences->weather.wind_spd = weatherObj.value("wind_spd").toString();

    /*ObserveWeather observeData;
    observeData.id = weatherObj.value("id").toString();
    observeData.city = weatherObj.value("location").toString();
    observeData.updatetime = weatherObj.value("update_loc").toString();
    observeData.air = QString("%1(%2)").arg(airObj.value("aqi").toString()).arg(airObj.value("qlty").toString());
    observeData.cloud = weatherObj.value("cloud").toString();
    observeData.cond_code = weatherObj.value("cond_code").toString();
    observeData.cond_txt = weatherObj.value("cond_txt").toString();
    observeData.fl = weatherObj.value("fl").toString();
    observeData.hum = weatherObj.value("hum").toString();
    observeData.pcpn = weatherObj.value("pcpn").toString();
    observeData.pres = weatherObj.value("pres").toString();
    observeData.tmp = weatherObj.value("tmp").toString();
    observeData.vis = weatherObj.value("vis").toString();
    observeData.wind_deg = weatherObj.value("wind_deg").toString();
    observeData.wind_dir = weatherObj.value("wind_dir").toString();
    observeData.wind_sc = weatherObj.value("wind_sc").toString();
    observeData.wind_spd = weatherObj.value("wind_spd").toString();*/

    emit this->observeDataRefreshed(m_preferences->weather);
}
开发者ID:UbuntuKylin,项目名称:indicator-china-weather,代码行数:98,代码来源:weatherworker.cpp


注:本文中的QNetworkReply::close方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。