Qt之QtSoap(访问WebService)

简介: 简述Qt本身给我们提供了调用WebService的解决方案QtSoap,源码及示例见:qt-solutions-qtsoap简述下载编译使用实例解析示例效果源码更多参考下载编译下载源码后,需要修改一些地方(我的版本是Qt5),按照错误提示修改即可,很简单。编译完成之后会生成QtSolutions_SOAP-headd.l

简述

Qt本身给我们提供了调用WebService的解决方案QtSoap,源码及示例见:qt-solutions-qtsoap

下载编译

下载源码后,需要修改一些地方(我的版本是Qt5),按照错误提示修改即可,很简单。

编译完成之后会生成QtSolutions_SOAP-headd.lib、QtSolutions_SOAP-headd.dll。。。

使用

拷贝QtSolutions_SOAP-headd.lib至lib目录下,拷贝qtsoap.h至include目录下。

pro中添加库文件及库目录:

INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -lQtSolutions_SOAP-headd

实例解析

下面,我们以“获得腾讯QQ在线状态”为例,见:WebXml.com.cn,里面包含了大量的Web服务,例如:手机号码归属地查询,电子邮件地址验证、城市天气预报查询等。

示例

SOAP 1.1

以下是SOAP1.1请求和响应示例。所显示的占位符需替换为实际值。

这里写图片描述

效果

这里写图片描述

源码

// 构建控件
m_pQQLabel = new QLabel(this);
m_pStateLabel = new QLabel(this);
m_pQQLineEdit = new QLineEdit(this);
m_pStateLineEdit = new QLineEdit(this);
m_pSubmitButton = new QPushButton(this);

m_pStateLineEdit->setReadOnly(true);
m_pQQLabel->setText(QString::fromLocal8Bit("QQ号码:"));
m_pStateLabel->setText(QString::fromLocal8Bit("QQ状态:"));
m_pSubmitButton->setText(QString::fromLocal8Bit("提交"));

QGridLayout *pLayout = new QGridLayout();
pLayout->addWidget(m_pQQLabel, 0, 0);
pLayout->addWidget(m_pQQLineEdit, 0, 1);
pLayout->addWidget(m_pStateLabel, 1, 0);
pLayout->addWidget(m_pStateLineEdit, 1, 1);
pLayout->addWidget(m_pSubmitButton, 2, 1, 1, 1, Qt::AlignRight);
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);
setLayout(pLayout);

// 连接信号槽
m_pHttp = new QtSoapHttpTransport(this);
connect(m_pSubmitButton, SIGNAL(clicked()), this, SLOT(onSubmit()));
connect(m_pHttp, SIGNAL(responseReady(const QtSoapMessage &)), this, SLOT(onResponse(const QtSoapMessage &)));

// 提交请求
void MainWindow::onSubmit()
{
    QtSoapMessage message;

    // 设置方法
    message.setMethod("qqCheckOnline", "http://WebXml.com.cn/");

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

    // 设置主机
    m_pHttp->setHost("www.webxml.com.cn");

    // 添加方法参数
    QString strQQ = m_pQQLineEdit->text();
    message.addMethodArgument("qqCode", "", strQQ);
    QString strXML = message.toXmlString();

    // 提交请求
    m_pHttp->submitRequest(message, "/webservices/qqOnlineWebService.asmx");
}

void MainWindow::onResponse(const QtSoapMessage &response)
{
    QString strXML = response.toXmlString();
    QDomDocument doc;
    doc.setContent(strXML);

    // 接在在线状态
    QDomNodeList nodeList = doc.elementsByTagName("qqCheckOnlineResult");
    if (!nodeList.isEmpty())
    {
        QDomNode node = nodeList.at(0);
        QString strResult = node.toElement().text();
        QString strState("N/A");
        if (QString::compare(strResult, "Y") ==0)
        {
            strState = QString::fromLocal8Bit("在线");
        }
        else if (QString::compare(strResult, "N") == 0)
        {
            strState = QString::fromLocal8Bit("离线");
        }
        else if (QString::compare(strResult, "E") == 0)
        {
            strState = QString::fromLocal8Bit("QQ号码错误");
        }
        else if (QString::compare(strResult, "A") == 0)
        {
            strState = QString::fromLocal8Bit("商业用户验证失败");
        }
        else if (QString::compare(strResult, "V") == 0)
        {
            strState = QString::fromLocal8Bit("免费用户超过数量");
        }
        m_pStateLineEdit->setText(strState);
    }
}

我们也可以使用qq号码进行在线验证:qqCheckOnline

更多参考

目录
相关文章
|
5月前
|
索引
Qt的复杂代理使用总结
Qt的复杂代理使用总结
92 0
|
编译器 C语言
QT应用编程: 快速创建指定大小的空文件
QT应用编程: 快速创建指定大小的空文件
395 0
一起谈.NET技术,SilverLight调用WebService的方法
  在我们添加Service Reference的时候,可能不知道该服务最终会被部署到什么位置,或者该服务可能被迁移,此时我们可以使用以下手段进行Service的调用,提高代码编写的灵活性。   步骤1:修改宿主Web页面的代码,将服务地址以初始化参数方式传入。
814 0
|
Java Android开发 数据格式
Android平台调用WebService详解
Android平台调用WebService详解 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyq8479/article/details/6428288       上篇文章已经对Web Service及其相关知识进行了介绍(Android开发之WebService介绍 ),相信有的朋友已经忍耐不住想试试在Android应用中调用Web Service。
2287 0
|
Web App开发 XML 网络架构
vc++2008 采用GSoap访问 WebService
(转http://www.cppblog.com/yeqing/articles/12762.html) 前一阶段写gSOAP 的文章没保存好,后来想写的,越学越没有写的勇气了,感觉自己很菜,但是现在感觉还是写点就算给入门者一点提示吧。
1066 0
|
Web App开发 XML C++
gsoap开发webservice
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。
1319 0
|
C++ 网络架构
根据wsdl使用gsoap开发webservice服务和客户端总结
基于wsdl使用gsoap开发webservice服务和客户端
2020 0