2014-09-27 74 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