Приложение Qt Console с использованием QNetworkAccessManager

Я пытаюсь написать приложение Qt, которое вызывает веб-службу. Это консольное приложение, и URL-адрес будет передан в качестве аргумента командной строки. Я искал например http программы в Qt и нашел эту ссылку:

http://qt-project.org/doc/qt-5/qnetworkaccessmanager.html

Здесь он имеет следующий пример кода:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl("http://qt-project.org")));

Теперь, если я возьму это и вставлю в свое консольное приложение в main, я, очевидно, получу ошибки сборки, потому что this не существует. Я получил :

invalid use of 'this' in non-member function

Существует ли эквивалент QNetworkAccessManager для приложений без графического интерфейса/консоли?


person TenG    schedule 21.08.2014    source источник
comment
Вы можете просто опустить this и использовать конструктор без аргументов. Не забудьте удалить менеджера, когда это необходимо.   -  person Pavel Strakhov    schedule 22.08.2014
comment
@Pavel - Конечно, я могу удалить это из 1-го вызова, но как насчет того, что это вызов подключения?   -  person TenG    schedule 23.08.2014


Ответы (1)


"this" - это указатель this объекта, поэтому в main.cpp это вызывает ошибки, вы должны написать какой-то класс, где вы будете работать с сетью, и после этого использовать этот класс в основной функции.

Это должно быть что-то вроде этого. Когда вы запустите приложение, вы получите html-код сайта Qt.

Это просто пример, в будущем мы можем добавить сюда конструктор, деструктор, возможно, сигналы (сигналы помогают нам общаться, например, с другими классами, если нам это нужно)

*.h

#ifndef NET_H
#define NET_H

#include <QObject>

#include <QtCore>
#include <QNetworkAccessManager>
#include <QNetworkReply>

class Net : public QObject
{
Q_OBJECT
  QNetworkAccessManager *manager;
private slots:
  void replyFinished(QNetworkReply *);
public:
  void CheckSite(QString url);
};



#endif // NET_H

*.cpp

#include "net.h"

void Net::replyFinished(QNetworkReply *reply) 
{ 
qDebug() << reply->readAll(); 
}

void Net::CheckSite(QString url) 
{
  QUrl qrl(url);
  manager = new QNetworkAccessManager(this);
  connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
  manager->get(QNetworkRequest(qrl));
}

главный

#include "net.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Net handler;
    handler.CheckSite("http://qt-project.org");


    return a.exec();
}
person Kosovan    schedule 21.08.2014
comment
Спасибо дружище, это мне очень помогло! - person TenG; 23.08.2014
comment
Работал на меня. Спасибо! - person Japanish; 29.06.2015