使用 QNetworkAccessManager 的 Qt 控制台应用程序

Ten*_*enG 1 c++ qt qnetworkaccessmanager

我正在尝试编写一个Qt调用 Web 服务的应用程序。这是一个控制台应用程序,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")));
Run Code Online (Sandbox Code Playgroud)

现在,如果我把它粘贴到我的控制台应用程序中main,我显然会收到构建错误,因为this它不存在。我得到:

invalid use of 'this' in non-member function
Run Code Online (Sandbox Code Playgroud)

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

Che*_*byl 5

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

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

这只是示例,将来我们可以在此处添加构造函数,析构函数,也许是信号(如果需要,信号可以帮助我们与其他类进行通信)

*。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
Run Code Online (Sandbox Code Playgroud)

*.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));
}
Run Code Online (Sandbox Code Playgroud)

主要的

#include "net.h"


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

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


    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)