Qt調用WebService


從網上查找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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM