做一个qt网络请求
Posted
技术标签:
【中文标题】做一个qt网络请求【英文标题】:Doing a qt network request 【发布时间】:2014-09-27 16:54:04 【问题描述】:我试图连接到一个网站并使用 qt 执行请求,到目前为止我得到了这段代码,但它告诉我以下错误:
#include <QCoreApplication>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QUrlQuery>
void sendRequest();
int main(int argc, char *argv[])
QCoreApplication a(argc, argv);
sendRequest();
return a.exec();
void sendRequest()
QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
上面写着:
错误 1 错误 C2355: 'this' : 只能在非静态内部引用 成员函数或非静态数据成员 初始化程序 c:\Users\Synturas\documents\visual studio 2013\Projects\qt_request\qt_request\main.cpp 19 1 qt_request
错误 2 错误 C2355: 'this' : 只能在非静态内部引用 成员函数或非静态数据成员 初始化程序 c:\Users\Synturas\documents\visual studio 2013\Projects\qt_request\qt_request\main.cpp 21 1 qt_request
错误 3 错误 C3861: 'connect': identifier not 找到 c:\Users\Synturas\documents\visual studio 2013\项目\qt_request\qt_request\main.cpp 20 1 qt_request 4 IntelliSense:“this”只能在非静态成员内部使用 函数 c:\Users\Synturas\Documents\Visual Studio 2013\Projects\qt_request\qt_request\main.cpp 19 61 qt_request
5 IntelliSense:标识符“connect”是 未定义 c:\Users\Synturas\Documents\Visual Studio 2013\Projects\qt_request\qt_request\main.cpp 20 2 qt_request
6 IntelliSense:“this”只能在非静态成员内部使用 函数 c:\Users\Synturas\Documents\Visual Studio 2013\Projects\qt_request\qt_request\main.cpp 21 3 qt_request
(我在这个项目中使用 VS2013,如果这是相关的)
【问题讨论】:
【参考方案1】:试试这个例子:
说明:你创建了一个新类,它将为你完成所有工作,在 main.cpp 中创建这个类的实例并调用方法。
*.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 *);//slot, we want catch responce
public:
void CheckSite(QString url);//our method
;
#endif // NET_H
*.cpp
#include "net.h"
void Net::replyFinished(QNetworkReply *reply) //this slot called when we have responce
qDebug() << reply->readAll(); //we read result and print it(also you can save it in some variable and use in code
void Net::CheckSite(QString url)
QUrl qrl(url);//QUrl has network adress
manager = new QNetworkAccessManager(this);//create manager
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));//do connection with nededed signal and slot which we alredy wrote
manager->get(QNetworkRequest(qrl));//send get request
主要
#include "net.h"
int main(int argc, char *argv[])
QApplication a(argc, argv);
Net handler;//create instance
handler.CheckSite("http://qt-project.org");//set path and wait for responce
return a.exec();
结果:Qt 站点的 html 代码
【讨论】:
@Synturas 我们可以在这里做,这个消息的结果可以在网络上看到,每个想要学习新东西的人都可以阅读它。请看我的编辑,我为每一行添加了解释并写了 cmets。 很好的解释,明白了一切!但为什么它没有按我的方式工作? @Synturas 主要错误在QNetworkAccessManager(this)
,您尝试在主cpp中将父级设置为QNetworkAccessManager,只有QObject子类才能成为另一个类的父级。第二:你尝试做connect,但是connect是QObject的静态方法,所以它至少应该是QObject::connect
,但是你的代码不能做某事,因为你没有提供可以捕获信息并打印它的槽(我的回答中的replyFinished 插槽执行此操作)以上是关于做一个qt网络请求的主要内容,如果未能解决你的问题,请参考以下文章
QT实现CSDN上传资源管理助手Demo之请求网络图片SVG并显示
我的QT Creator学习笔记(三十四)——网络编程之HTTP与FTP