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

Posted

技术标签:

【中文标题】使用 QNetworkAccessManager 的 Qt 控制台应用程序【英文标题】:Qt Console app using QNetworkAccessManager 【发布时间】:2014-08-21 18:42:55 【问题描述】:

我正在尝试编写一个调用网络服务的Qt 应用程序。这是一个控制台应用程序,url 将作为命令行参数传入。我在Qt 中搜索了例如http 程序并找到了这个链接:

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

【问题讨论】:

您可以省略 this 并使用不带参数的构造函数。确保在需要时删除管理器。 @Pavel - 当然我可以从第一次调用中删除“this”,但是“this”是 connect 调用呢? 【参考方案1】:

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

应该是这样的。当你运行app时,你会得到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

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

【讨论】:

谢谢小伙子,这对我帮助很大! 为我工作。谢谢!

以上是关于使用 QNetworkAccessManager 的 Qt 控制台应用程序的主要内容,如果未能解决你的问题,请参考以下文章

离线使用 QNetworkAccessManager

跨 dll 使用 QNetworkAccessManager

使用 QNetWorkAccessManager 将值传递给插槽

如何使用 Qt/QNetworkAccessManager (C++) 实现 SFTP

如何使用 QNetworkAccessManager 找出数据传输延迟

使用 QNetworkAccessManager 时如何处理代理