QtSoap調用Web Service(QtSoap是非官方應用)


今天學習如何用QtSoap訪問Web Service服務。這里調用的是查詢QQ在線狀態的服務qqOnlineWebService。調用的幾個步驟:

1.創建QtSoapMessage對象 message;

2.message調用setMethod設置調用的服務

3.message調用addMethodArgument設置參數

4.創建QtSoapHttpTransport  *m_pHttp

5.m_pHttp調用setHost,setAction

6.最后m_pHttp調用submitRequest提交請求

 

class WebServiceClient : public QDialog

{

       Q_OBJECT

 

public:

       WebServiceClient(QWidget *parent = 0,Qt::WFlags flags = 0);

       ~WebServiceClient();

 

       private slots:

              voidSubmitSlot();

              voidResponseSlot(const QtSoapMessage &response);

private:

       voidresizeEvent(QResizeEvent *event);

       QLineEdit   *m_pNumber;

       QPushButton *m_pSubmit;

       QLineEdit   *m_pResult;

       QLabel      *m_pQQNumber;

       QLabel      *m_pState;

       QtSoapHttpTransport  *m_pHttp;

};

 

 

WebServiceClient::WebServiceClient(QWidget*parent, Qt::WFlags flags)

       : QDialog(parent, flags)

{

       m_pQQNumber = newQLabel(tr("QQ號碼"),this);

       m_pState = newQLabel(tr("QQ狀態"),this);

       m_pNumber = newQLineEdit(this);

       m_pResult = newQLineEdit(this);

       m_pResult->setReadOnly(true);

       m_pSubmit = newQPushButton(tr("提交"),this);

       m_pHttp = newQtSoapHttpTransport;

       connect(m_pSubmit,SIGNAL(clicked()),this,SLOT(SubmitSlot()));

       connect(m_pHttp,SIGNAL(responseReady( const QtSoapMessage & )),this,SLOT(ResponseSlot(constQtSoapMessage &)));

       this->setFixedSize(QSize(300,300));

}

 

WebServiceClient::~WebServiceClient()

{

 

}

 

voidWebServiceClient::ResponseSlot( constQtSoapMessage & response )

{

       QString xml = response.toXmlString();

       QDomDocument doc;

       doc.setContent(xml);

       QDomNodeList nodeList =doc.elementsByTagName("qqCheckOnlineResult");

       if(nodeList.size())

       {

              QDomNode resultNode =nodeList.at(0);

              QString result =resultNode.toElement().text();

              QString state;

              if(QString::compare(result,"Y") ==0)

              {

                     state = tr("在線");

              }

              elseif (QString::compare(result,"N") == 0)

              {

                     state = tr("離線");

              }

              elseif (QString::compare(result,"E") == 0)

              {

                     state = tr("QQ號碼錯誤");

              }

              elseif (QString::compare(result,"A") == 0)

              {

                     state = tr("商業用戶驗證失敗");

              }

              elseif (QString::compare(result,"V") == 0)

              {

                     state = tr("免費用戶超過數量");

              }

              m_pResult->setText(state);

       }

}

 

voidWebServiceClient::SubmitSlot()

{

       QtSoapMessage message;

       message.setMethod("qqCheckOnline","http://WebXml.com.cn/");

       m_pHttp->setAction("http://WebXml.com.cn/qqCheckOnline");

       m_pHttp->setHost("webservice.webxml.com.cn");

       QString number = m_pNumber->text();

       message.addMethodArgument("qqCode","",number);

       QString xml = message.toXmlString();

       m_pHttp->submitRequest(message,"/webservices/qqOnlineWebService.asmx");

}

 

voidWebServiceClient::resizeEvent( QResizeEvent *event)

{

       m_pQQNumber->setGeometry(5,5,50,20);

       m_pNumber->setGeometry(60,5,100,20);

       m_pSubmit->setGeometry(160,5,50,20);

       m_pState->setGeometry(5,30,50,20);

       m_pResult->setGeometry(60,30,100,20);

}

int main(int argc, char*argv[])

{

       QApplication a(argc, argv);

       QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));

       QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));

       QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

       WebServiceClient w;

       w.show();

       returna.exec();

}

 

 

 

 http://blog.csdn.net/hai200501019/article/details/19755987

 


免責聲明!

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



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