Connecting a function to QHttp::requestFinished

52 views Asked by At

I am using Qt 4.1, the last version that compiles to Windows 98 (although I am running this on Windows XP because I have an AMD processor which cannot virtualize win98). I do not have access to more modern classes like QNetworkManager.

I'm trying to make a method that gets the contents of a url. The class is defined as so:

#ifndef __SONG_HPP
#define __SONG_HPP
#include <string>
#include <QWidget>

class Status : public QObject
{
    Q_OBJECT

signals:

public slots:
    void onRequestFinished(int id, bool error);

public:
    Status();
    virtual ~Status(){};
};
#endif

And the relevant function is:

Status::Status()
{
    QHttp *http = new QHttp("plaza.one");

    QHttpRequestHeader header("GET", "/status");
    header.setValue("Host", "plaza.one");
    http->request(header);

    bool what = QObject::connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(onRequestFinished(int, bool)));

    std::cout << what << std::endl;
}

void Status::onRequestFinished(int id, bool error)
{
    std::cout << "called" << std::endl;
}

QObject::connect returns true, but the function never gets called.

1

There are 1 answers

3
ioi-xd On

My code (after realizing I'd changed it to requestStarted at some point without thinking, when it should've been requestFinished) was working correctly.

Opening up plaza.one in IE6 reveals that a connection is never actually made. It simply keeps hanging. As it turns out, plaza.one doesn't actually support http and Windows XP does not support the newer TLS/SSL protocols that Cloudflare uses over https.