C ++ QNetworkAccessManager (Qt) в сочетании с openGL - PullRequest
1 голос
/ 17 февраля 2012

Я действительно незнаком с C ++ (как упоминалось в моих предыдущих постах), однако мой друг предложил мне поработать с QNetworkAccessManager, если я хочу отправить HTTP-запрос GET для отправки информации.

В настоящее время я работаю с openGL-es и хочу отправить следующие две строки кода для отправки запроса на получение:

QNetworkAccessManager* netMan = new QNetworkAccessManager(this);
netMan->get(QNetworkRequest(QUrl("something/?userID=1")));

Однако, ему не нравится «this», потому что он находится в методе main () и не ссылается на QObject (я предполагаю, что QApplication). Когда я избавляюсь от «этого», мое приложение собирается, но просто никогда не загружается (я помещаю «printf (1)» вверху, который даже не запускается).

Есть предложения или альтернативы, как это исправить? Заранее спасибо.

-Джеймс

1 Ответ

1 голос
/ 17 февраля 2012

Параметр в конструкторе QNetworkAccessManager необходим только для указания родительского элемента на основе QObject, который будет отвечать за очистку (удаление) вашего объекта позднее и не нужен, если вы планируете вызывать delete для него сами.

Я не совсем уверен, на что вы ссылаетесь, «никогда не загружается» или куда вы помещаете printf, но для того, чтобы получить что-либо обратно, вам нужно сохранить указатель QNetworkReply, который возвращается позвоните по номеру get().

И чтобы получить что-то от этого, вам нужно запустить цикл обработки событий. Если ваше приложение только для консоли (без графического интерфейса), вы можете использовать объект QCoreApplication.

Попробуйте этот минимальный код:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QNetworkAccessManager *netMan = new QNetworkAccessManager();
    QNetworkReply *reply = netMan->get(QNetworkRequest(QUrl("http://google.com")));
    a.connect(reply, SIGNAL(finished()), SLOT(quit()));
    a.exec();
    qDebug() << reply->readAll();
    delete netMan;
}
...