由于当前C++项目需要使用ajax库去post调用ashx接口,接口地址如下所示:

需要传递的参数如下:

然后发现qml比较好调用ajax.js库,所以本章通过C++界面去获取qml方法来实现调用ashx接口(以一个C++界面demo程序为例)

1.抓post数据

通过网页获取到的post数据如下所示:

所以查询20191121~20191122期间时则填入内容: "deptCode=021&startDate=20191121&endDate=20191122"

2.导入ajax.js库

ajax.js文件如下所示:

//GETfunctionget(url, success, failure)

{var xhr = newXMLHttpRequest;

xhr.open("GET", url);

xhr.onreadystatechange=function() {

handleResponse(xhr, success, failure);

}

xhr.send();

}//POSTfunction post(url, arg, success, failure)

{var xhr = newXMLHttpRequest;

xhr.open("POST", url);

xhr.setRequestHeader("Content-Length", arg.length);

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); //用POST的时候一定要有这句xhr.onreadystatechange=function() {

handleResponse(xhr, success, failure);

}

xhr.send(arg);

}//处理返回值function handleResponse(xhr, success, failure){if (xhr.readyState ==XMLHttpRequest.DONE) {if (xhr.status == 200){if (success != null && success !=undefined)

{var result =xhr.responseText;try{

success(result, JSON.parse(result));

}catch(e){

success(result, {});

}

}

}else{if (failure != null && failure !=undefined)

failure(xhr.responseText, xhr.status);

}

}

}

3.写main.qml

import QtQuick 2.3import QtQuick.Window2.2import"ajax.js" asAjax

Item {function getWrenchTools(deptCode,startDate,endDate) {

console.log("Got message:", deptCode,startDate,endDate)//打印参数数据

Ajax.post("http://10.194.102.253/WLPTService/Pages/Tools/GetNLToolsByDeptCode.ashx","deptCode="+deptCode+"&startDate="+startDate+"&endDate="+endDate+"",

Widget.invokeFunc);

}

这里表示定义一个getWrenchTools()方法,当post成功并返回数据时,则调用Widget.invokeFunc()回调函数(Widget: 该qml对应的C++类,后面会讲怎么捆绑的)

4.widget界面如下

然后写widget.h

#ifndef WIDGET_H#define WIDGET_H#include#include#include#include#include#include

namespaceUi {classwidget;

}class widget : publicQWidget

{

Q_OBJECT

QQmlApplicationEngine engine;

QObject*engineObject; //指向运行的qml对象

public:explicit widget(QWidget *parent = 0);~widget();private:

Ui::widget*ui;public:

Q_INVOKABLEvoidinvokeFunc(QVariant data1,QVariant data2);privateslots:voidon_pushButton_clicked();

};#endif //WIDGET_H

写widget.cpp

#include "widget.h"#include"ui_widget.h"#include#includewidget::widget(QWidget*parent) :

QWidget(parent),

ui(newUi::widget)

{

ui->setupUi(this);

engine.rootContext()->setContextProperty("Widget",this);//将QML中的Widget变量指向为当前类.从而使QML和widget类连接起来

engineObject= QQmlComponent(&engine, "qrc:/main.qml").create(); //创建qml并获取运行中的qml对象

}

widget::~widget()

{deleteui;

}voidwidget::invokeFunc(QVariant data1,QVariant data2)

{

ui->plainTextEdit->setPlainText(data1.toString());

}voidwidget::on_pushButton_clicked()

{

QVariant depatment= "021";

QVariant start= ui->start->text();

QVariant end= ui->end->text(); //"结束日期"

QMetaObject::invokeMethod(engineObject,"getWrenchTools",Q_ARG(QVariant, depatment)\

,Q_ARG(QVariant, start),Q_ARG(QVariant, end));

}

engine.rootContext()->setContextProperty("Widget",this)的作用:

将QML中的Widget变量指向为当前类.从而使QML和widget类连接起来, 然后main.qml如果post成功则调用当前类的invokeFunc(QVariant data1,QVariant data2)方法,从而实现数据返回.

当按下同步按钮时,则调用on_pushButton_clicked():

由于engineObject指向运行中的qml对象,然后我们通过invokeMethod()就可以方便的请求调用qml对象中的getWrenchTools()函数.从而实现post请求

点击同步后,效果如下

注意-如果出现QQmlComponent: Component is not ready字段,说明qml和js所在路径不在界面文件夹里

创建文件的时候,就需要将文件都放在界面目录中,才行:

ashx 接口调用_51.Qt-使用ajax获取ashx接口的post数据相关推荐

  1. Ajax怎么获取天气,Ajax获取全国天气预报的API数据

    这次给大家带来Ajax获取全国天气预报的API数据,Ajax获取全国天气预报API数据的注意事项有哪些,下面就是实战案例,一起来看一下. 预览图(比较简单粗糙) 聚合数据全国天气预报接口:https: ...

  2. 微信支付分 - 接口调用几个重要参数获取

    调用接口需要以下必须参数,此处介绍小程序的必须参数获取及来源. 1.appid. 申请支付分时对应的公众号,小程序,移动应用appid.此appid需要和填写配置表中的一致,和微信配置的service ...

  3. Vue 拦截器 多接口调用 实现唯一loding效果 解决同步接口调用loding闪动

    大纲 1.引入`import axios from 'axios'` 2.创建loding函数`Loading.service`,创建计数变量`requestCount = 0`, 3.创建axios ...

  4. 使用 Qt for Android 获取并利用手机传感器数据(下篇)使用C++实现功能

    在上一篇,我们搭建了开发环境.本篇,使用C++代码真正实现功能.我们使用UDP协议从手机上指定发送的目的地.端口.效果如下图,完整工程参考https://gitcode.net/coloreagles ...

  5. 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。...

    开讲前,先说下网上,大部分的关于这方面的博文或者其他什么的,就我自己的感觉,第一说得不详细,第二语言不能很好的被初学者了解. 我这篇博文的标题之所以用了三句,是为了方便其他人好查找: 这里介绍的方法有 ...

  6. 利用jquery的ajax获取后台返回的json数据为空

    错误示例 $.ajax({type:'POST',url:'',data:'',success:function(data){console.log(data);console.log(data.en ...

  7. 使用 Qt for Android 获取并利用手机传感器数据(上篇)开发环境省心搭建

    现代手机拥有许多传感器,包括地磁.姿态.GPS.光照.温度.气压.摄像.声音.电磁等,完全就是一个高度集成的科学仪器.不夸张的说,一部手机加上一个外围的计算机和控制系统,做一个功能较强的自主移动机器人 ...

  8. 使用PHP通过AJAX获取到JSON文件的数据,点击按钮后添加url 跳转到指定页面

    html前端页面.通过AJAX异步获取内容 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  9. java短信接口 调用_带你了解短信接口的调用

    查看接口说明 image.png 注册账号 注册成功的页面如下: image.png 设置短信内容的签名 比如:将短信签名设置为yzc image.png 查取短信接口密钥 image.png 设计J ...

最新文章

  1. mysql sql demo
  2. android u盘拷贝文件大小,用手机U盘备份或导出手机文件,还能扩容
  3. 利用android studio 生成 JNI需要的动态库so文件
  4. android传感器获取运动方向,Android开发者指南-运动传感器Motion Sensor[原创译文]...
  5. 从战中反弹:将Git提交信息作为JSON返回
  6. MATLAB中MEX文件的编写与调试
  7. mysql离散查询_如何写出高性能的MySQL查询
  8. python删除链表中重复的节点_删除链表中所有值与Python相同的节点的程序
  9. 蔚来事件后 理想和小鹏改了“辅助驾驶系统”官方宣传用词
  10. Java按包编译jar_java用命令行编译运行时带有包和使用外部jar包的情况
  11. Tomcat 指定jdk
  12. java 管道流_Java IO7:管道流、对象流
  13. Blue Prism如何成为RPA领域魔力象限领袖
  14. 《软件工程与实践》 |(一)软件工程基础概述 知识梳理
  15. 下载CSS参考手册之后打开却无法显示
  16. 免费获取全球生物量密度1km网格tif数据(GEDI L4B Gridded Aboveground Biomass Density, Version 2)
  17. 小飞鱼平台介绍——小飞鱼开发者服务平台业务介绍
  18. Hazelcast源码剖析之Eviction
  19. Source Insight使用教程(一):导入工程
  20. 长度单位换算python_长度单位换算表-在线长度单位转换器

热门文章

  1. Word文档页码如何从第三页(或某一页)开始添加
  2. (C语言)关于逗号表达式
  3. C语言逗号表达式在for循环语句中的使用
  4. PS去除图片水印有哪些方法?有什么相关教程
  5. Django+pyecharts实现电影数据分析可视化
  6. 推荐系统冷启动解决方法
  7. Android App内部更新(最新) 各安卓版本适配
  8. 在线解密Word密码,保护您的隐私安全
  9. 一文读懂Move2Earn项目——MOVE
  10. rust收藏服务器在哪个文件,rust服务器废料设置