2010-12-01 7 views

cevap

14

QWebPage'inizle ilişkili QNetworkAccessManager numaralı telefonu izlemeniz ve finished(...) sinyalini beklemeniz gerekir. Daha sonra HTTP yanıtını inceleyebilir ve QNetworkRequest::HttpStatusCodeAttribute özniteliğini sorarak durum kodunu kontrol edebilirsiniz.

void MyClass::initWebPage() 
{ 
    myQWebPage = new QWebPage(this); 
    connect(
    myQWebPage->networkAccessManager(), SIGNAL(finished(QNetworkReply *)), 
    this, SLOT(httpResponseFinished(QNetworkReply *)) 
); 
} 

void MyClass::httpResponseFinished(QNetworkReply * reply) 
{ 
    switch (reply->error()) 
    { 
    case QNetworkReply::NoError: 
     // No error 
     return; 
    case QNetworkReply::ContentNotFoundError: 
     // 404 Not found 
     failedUrl = reply->request.url(); 
     httpStatus = reply->attribute(
     QNetworkRequest::HttpStatusCodeAttribute).toInt(); 
     httpStatusMessage = reply->attribute(
     QNetworkRequest::HttpReasonPhraseAttribute).toByteArray(); 
     break; 
    } 
} 

, mesela seçim NetworkErrors daha vardır:

daha iyi olur kodunda açıkladı TCP hataları veya HTTP 401 için.

+5

FWIW, bir de QNetworkReply :: Özelliği ve QNetworkRequest :: HttpStatusCodeAttribute bkz: http doğrudan HTTP durum kodu sorgulayabilir. //doc.qt .nokia.com/4.7-enstantane/qnetworkreply.html # özelliği. – Macke

+0

İstemediğiniz bir şey, bir web sayfasındaki her bir öğe için yüklenemeyen bu özelliği tetiklemektir; örneğin görüntüler ve JavaScript. İdeal olarak, muhtemelen sadece ana sayfanın kendisinin yüklenmemesine özen gösterirsiniz. –

2

Bu, bir taşıma projesinde kullanıyorum. Yanıtı kontrol eder ve istek yapıp yapmadığını geri almaya karar verir. vazgeçiyor parçası sürüyor ama ben yorum yapmamışlar

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

QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); 
if (!statusCode.isNull() && statusCode.toInt() >= 400){ 
    //INVALID_SERVER_RESPONSE_BACKOFF; 
    qDebug() << "server returned invalid response." << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); 
    return; 
}else if (!statusCode.isNull() && statusCode.toInt() != 200){ 
    //INVALID_SERVER_RESPONSE_NOBACKOFF; 
    qDebug() << "server returned invalid response." << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); 
    return; 
}