2015-11-05 17 views
0

我需要從url中獲取json文件,將其填充到QtNetworkReply *回覆中,並在連接函數中發送回覆以將其轉換爲QbyteArray以解析我的Json響應。Qt cpp不能發送obj到連接的函數

但是,當我在連接的功能去的,我不能與回覆(總是空的)填寫的QByteArray 這裏是我的代碼:

int main(int ac, char *av[]) 
{ 
    Borne   borne(ac, av); 
    reply   myReply; 

    QNetworkAccessManager networkManager; 
    QUrl url("http://vps202498.ovh.net:8080/ws/rest/v.1/stores/categories/150/products"); 
    QNetworkRequest request; 
    request.setUrl(url); 
    myReply._reply = networkManager.get(request); 
    QObject::connect(myReply._reply, SIGNAL(finished()), &myReply, SLOT(fonction())); 
    myReply._reply->finished(); 
    exit(1); 
    if (borne.initialize() == false) 
     return (false); 
    return (borne._app->exec()); 
} 

這是我的連接功能:

IProduct  *reply::fonction() 
{ 
    QByteArray List; 

    std::cout << "connected" << std::endl; 
    List = _reply->readAll(); 
    if (List.isNull()) 
     exit(6); 
    return (NULL); 
} 

我.H:

​​

我不能std :: cout「連接」,但總是qui t,錯誤日誌'6'。

我真的不知道我在哪裏做錯誤(Iam用於C,而不是Cpp),我已經閱讀了Qt的所有人,並且不知道出了什麼問題。 有什麼建議嗎?

謝謝你,弱技巧和英文

+0

您需要處理錯誤。閱讀所有'QNetworkReply'信號。 –

回答

0

道歉你創建請求後立即手動調用finish()功能。在那一刻,請求還沒有開始,所以_reply->readAll()沒有什麼可讀的。調用應用程序exec()後,回覆finished信號應該由偶數循環調用。

刪除行:

myReply._reply->finished(); 
exit(1); 

該請求將被asyncronously在事件循環處理。


其他問題:

  • 插槽reply::fonction()不需要任何retrun值;
  • 由於(borne.initialize() == false),事件循環可能無法啓動。
+0

lil錯誤,: 我可以打印「已連接」,但始終退出6 –

+0

@EtienneCtrs從回覆中返回的數據可以作爲myReply的成員存儲,以便稍後重用。 –

+0

奧列斯特赫拉:謝謝你的回答,以及我在循環之前放了一個退出,以便能夠輕鬆地處理它,但我認爲 - >完成是一個阻塞信號。我知道我不需要回來,但後來我需要它的程序。我會讀qapp的人。 –