使用 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 控制台应用程序的主要内容,如果未能解决你的问题,请参考以下文章
跨 dll 使用 QNetworkAccessManager
使用 QNetWorkAccessManager 将值传递给插槽
如何使用 Qt/QNetworkAccessManager (C++) 实现 SFTP