2011-06-16 65 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