使用QNetworkAccessManager的Qt Console应用程序

时间:2014-08-21 18:42:56

标签: c++ qt qnetworkaccessmanager

我正在尝试编写一个调用Web服务的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

非GUI /控制台类型的应用程序是否有等效的QNetworkAccessManager

1 个答案:

答案 0 :(得分:4)

“this”是一个对象的this指针,所以在main.cpp中它会导致错误,你应该编写一些你将使用网络的类,然后在main函数中使用这个类

它应该是这样的。当您运行应用程序时,您将获得Qt站点的HTML代码

这只是一个例子,将来我们可以在这里添加constructot,析构函数,也许信号(如果需要的话,信号可以帮助我们与其他类进行通信)

*的.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();
}