2014-09-27 71 views
0

林试图连接到一个网站,并执行与QT的请求,我得到这个代码,到目前为止,但它告诉我下面的错误:做一个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:“这个”:\用户\ Synturas \文件\视觉工作室 2013 \项目\ qt_request \ qt_request:只能内部非静态 成员函数或非静态数据成员 初始化ç引用\ main.cpp 19 1 qt_request

错误2错误C2355:“这个”:\用户\ Synturas \文件\视觉工作室 2013 \项目\ qt_request \ qt_request:只能内部非静态 成员函数或非静态数据成员 初始化Ç引用\ main.cpp中21 1 qt_request

错误3错误C3861: '连接':标识符不 实测值C:\ Users \用户Synturas \文件\视觉工作室 2013 \项目\ qt_request \ qt_request \ main.cpp中20 1 qt_request 4智能感知:'this'只能在非静态成员中使用 函数c:\ Users \ Synturas \ Documents \ Visual Studio 2013 \ Projects \ qt_request \ qt_re任务\ main.cpp中19 61 qt_request

5智能感知:标识符 “连接” 是 未定义C:\用户\ Synturas \文件\的Visual Studio 2013 \项目\ qt_request \ qt_request \ main.cpp中20 2 qt_request

6智能感知: '这个' 可以仅由非静态成员 函数c内使用:\用户\ Synturas \文件\的Visual Studio 2013 \项目\ 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的网站

+0

@Synturas在这里我们可以做到这一点的HTML代码,这个消息的结果可以在网络和每个想要学习东西的人看到新的可以读取它。请参阅我的编辑,我添加了解释并为每条重要线路写了评论。 – Chernobyl 2014-09-27 17:24:46

+0

很好的解释,了解一切!但为什么它没有按我的方式工作? – orbatschow 2014-09-27 17:30:57

+1

@Synturas主要的错误是在'QNetworkAccessManager(this)'中,您尝试在主cpp中将父元素设置为QNetworkAccessManager,只有QObject子类可以作为另一个类的父元素。第二:你尝试做连接,但连接是QObject的静态方法,所以它应该至少是'QObject :: connect',但是你的代码不能做任何事情,因为你没有提供可以捕获信息的槽打印它(replyFinished插槽在我的答案做到这一点) – Chernobyl 2014-09-27 17:39:14