بلدي qhttp الحصول على() الاتصال لا يعمل على ويندوز ولكن لا على لينكس

StackOverflow https://stackoverflow.com/questions/803088

  •  03-07-2019
  •  | 
  •  

سؤال

لقد كتبت برنامج يستخدم qhttp للحصول على صفحة ويب.هذا يعمل بشكل جيد على لينكس ولكن لا يعمل على ويندوز مربع (ويندوز فيستا).يبدو أن qhttp يتم الإشارة لم تتلق.

رمز ذات الصلة:

    Window::Window()
{
    http = new QHttp(this);
    connect(http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
url = new QUrl("http://something.com/status.xml");
http->setHost(url->host(), url->port() != -1 ? url->port() : 80);
    if (!url->userName().isEmpty()) http->setUser(url->userName(), url->password());
}

void Window::retrievePage()
{ 
byteArray = new QByteArray;
result = new QBuffer(byteArray);
result->open(QIODevice::WriteOnly);

    httpRequestAborted = false;
    httpGetId = http->get(url->path(), result);
 }

 void Window::httpDone(bool error)
 {
     //Never gets here!
 }

أي مساعدة ستكون appriecated.

مات

هل كانت مفيدة؟

المحلول

وهذا لا ينبغي أن يحدث على الإطلاق، أي QHttp يعمل بشكل صحيح على كل من ويندوز ويونيكس.

ونصيحتي هي أن تحقق ما إذا كان يخدم يعطي الرد المناسب. ويمكن أن يتم هذا على سبيل المثال عن طريق التأكد من أن نقل البيانات على ما يرام. يمكنك تتبع حالة من إشارة QHttp، وعلى سبيل المثال dataReadProgress و <لأ href = "http://doc.trolltech.com /4.5/qhttp.html#requestStarted "يختلط =" نوفولو noreferrer "> requestStarted و <لأ href =" http://doc.trolltech.com/4.5/qhttp.html#requestFinished "يختلط =" نوفولو noreferrer "> requestFinished ، والإشارات الأخرى ذات الصلة.

وعلى صعيد آخر، بدلا من استخدام QHttp من العمر، لماذا لا تستخدم أوصى QNetworkAccessManager بدلا من ذلك؟ للحصول على قدميك الرطب بسرعة، تحقق مثال نشرت لي لكيو تي مختبرات منذ بعض الوقت: <لأ href = "http://labs.trolltech.com/blogs/2008/11/08/image-viewer-with-remote- رابط السحب والإفلات دعم / "يختلط =" نوفولو noreferrer "> صورة المشاهد مع السحب والإفلات دعم URL بعد . ويستخدم قال QNetworkAccessManager لانتزاع الصورة من URL انخفض. تحقق من التعليمات البرمجية المصدر ، هو فقط 150 خطوط.

نصائح أخرى

إعادة كتابة كما اقترح Ariya استخدام QNetworkAccessManager وتبحث في هذا المثال

هذا الآن يعمل على ويندوز و لينكس.

Window::Window()
{
   connect(&manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(retrieveData(QNetworkReply*)));
}

void Window::retrieveMessage()
{
    manager.get(QNetworkRequest(QUrl("http://...")));
}

void Window::retrieveData(QNetworkReply *reply)
{
    QVariant statusCodeV = 
    reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

    // "200 OK" received?
    if (statusCodeV.toInt()==200)
    {
        QByteArray bytes = reply->readAll();  // bytes
    }

    reply->deleteLater();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top