從網上查找Qt調用WebService的方案,需要下載三方的類庫,而且需要使用好幾個控制台命令,才能生成代理客戶端類.因為只是簡單的測試,沒有采用這種方式,直接使用HTTP的Get獲取網站內容,也非常簡單,調用開放的翻譯WebService接口.代碼如下:
QEventLoop loop;//事件循環對象,在任何時候,你都可以創建一個QEventLoop的對象,然后調用它的exec() 來開始一個局部的事件循環。
QNetworkAccessManager manager(this);//QHTTP等類都過時了,推薦使用這個類實現網絡通信
QString sUrl = transUrl + ui.leChinese->text();//生成HTTP的url地址
QUrl::toPercentEncoding(sUrl);//進行url編碼
QNetworkReply *reply = manager.get(QNetworkRequest(sUrl));//調用get方法獲取WebService返回的xml
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); //調用返回后事件循環對象退出
//開啟子事件循環 等待調用返回
loop.exec();
QFile file(TRANSFILENAME);
file.open(QIODevice::WriteOnly);
QTextStream out(&file);
out.setCodec("UTF8");//指定文件的編碼,否則文件中的中文亂碼
QTextCodec *codec = QTextCodec::codecForName("UTF8");
out << codec->toUnicode(reply->readAll()) << endl;//從HTTP請求響應對象中讀取xml文件內容,並存入到文件
file.close();
QFile xmlfile(TRANSFILENAME);
if(!xmlfile.open(QFile::ReadOnly | QFile::Text)) return;
QTextStream floStream(&xmlfile);
floStream.setCodec(codec);
QString xmlData = floStream.readAll();
xmlfile.close();
QDomDocument doc;//創建Dom類對象解析xml
QString errorInfo;
int errorLine, errorColumn;
if(doc.setContent(xmlData))
{
QDomNode node = doc.documentElement().elementsByTagName("diffgr:diffgram").at(0);
node = node.toElement().elementsByTagName("Dictionary").at(0);
node = node.toElement().elementsByTagName("Translation").at(0);
ui.leResult->setText(node.toElement().text());//得到xml中某個節點的值
}
xmlfile.close();
http://blog.csdn.net/henreash/article/details/7644969