2011-06-16 64 views
1

我需要谷歌(或其他引擎)搜索我的桌面程序。 請給我一個示例如何發送POST請求到API並獲得答案。 我使用Qt和C++。Qt +搜索引擎API

例如這個代碼不工作(這是關於Yandex的API):

QString* query = new QString("<?xml version=""1.0"" encoding=""UTF-8""?>" 
          "<request><query>" + ui->search_le->text().toUtf8() + 
          "</query><groupings><groupby attr=""d""" 
          "mode=""deep""groups-on-page=""10""docs-in-group=""1"" />" 
          "</groupings></request>"); 

QUrl apiurl = QUrl("http://xmlsearch.yandex.ru/xmlsearch?user=*******&" 
        "key=03.*******:**************f01e29f007af7994e951"); 

manager = new QNetworkAccessManager(); 
request = new QNetworkRequest(apiurl); 
reply = manager->post(*request, query->toUtf8()); 

QString answer = QString::fromUtf8(reply->readAll()); 

而且我真的不知道如何找到問題。

謝謝所有誰將能夠幫助我。

+0

如果搜索字符串包含XML標記(<, >等),則您的XML會中斷。更好地使用QXmlStreamWriter。 – 2012-05-19 11:37:32

回答

0

您正處在正確的軌道上。閱讀關於Qt中的信號和插槽。 http://doc.qt.io/archives/qt-4.7/signalsandslots.html

您必須將QNetworkAccessManager的finished()信號連接到您自己的插槽,然後調用reply-> readAll();

在調用post方法之前執行此操作。

connect(manager, SIGNAL(finished(QNetworkReply*)), 
    this, SLOT(replyFinished(QNetworkReply*))); 

然後在您的班級實施replyFinished方法。

MyClass::replyFinished(QNetworkReply* reply) 
{ 
QString answer = QString::fromUtf8(reply->readAll());  
} 
+0

非常感謝!我有答案以及錯誤=)但現在我知道問題在哪裏。奇怪爲什麼程序沒有捕獲完成()信號就無法工作。 – 2011-06-16 17:54:40