Qt WebView js交互(new) 支持ios android 平台
2016-05-22 20:35
567 查看
由于服务器和HTML界面在同一个进程,因此传输速度很快,不用考虑传输速度问题。
并且C++端放在本地可以做本地App应用,放在服务器,可以做网页应用。
原理是 界面中 new Qt HTTP服务器,
HTML端用JavaScript XMLHttpRequest发送请求给C++(可包含参数 参数中使用字符串用来表示,函数可以用HTTP 子域开表示,),C++根据传入的字符串,调用Qt元函数,或者封装入Qt quick中,调用eval.推荐用Qt quick封装,因为更方便,他里面封装好了ios 和 android的Webview
返回值由C++ HTTP服务器端返回。
因为直接是Qt和javasc交互,因此跳过了中间层
传统:
C++ —> JAVA(objecttive C) —> JavaScript
C++ <— JAVA(objecttive C) <—- JavaScript
现在:C++ <—> JavaScript
DEMO:
并且C++端放在本地可以做本地App应用,放在服务器,可以做网页应用。
原理是 界面中 new Qt HTTP服务器,
HTML端用JavaScript XMLHttpRequest发送请求给C++(可包含参数 参数中使用字符串用来表示,函数可以用HTTP 子域开表示,),C++根据传入的字符串,调用Qt元函数,或者封装入Qt quick中,调用eval.推荐用Qt quick封装,因为更方便,他里面封装好了ios 和 android的Webview
返回值由C++ HTTP服务器端返回。
因为直接是Qt和javasc交互,因此跳过了中间层
传统:
C++ —> JAVA(objecttive C) —> JavaScript
C++ <— JAVA(objecttive C) <—- JavaScript
现在:C++ <—> JavaScript
DEMO:
int testdata=0; void Helloworldcontroller3::service(HttpRequest &request, HttpResponse &response) { //允许跨域 response.setHeader("Access-Control-Allow-Origin", "*"); QByteArray path=request.getPath(); qDebug("RequestMapper: path=%s",path.data()); if (path=="/test") { //获取参数 QByteArray m_id=request.getParameter("p1"); QString s; s.sprintf("data %d",m_id.toInt()); response.setStatus(200,"ok"); //返回成功代码200 已经代码字符串 response.write(s.toStdString().c_str(),true);//写入参数 testdata++; } else { response.setStatus(404,"oo!Not found"); QString s =QString::fromLocal8Bit("未知的连接哦"); QByteArray s2(s.toStdString().c_str()); response.write(s2,true); } qDebug("RequestMapper: finished request"); }
var xhr; function 异步CALL_Test(arg1) { if (!xhr) { xhr = new XMLHttpRequest(); } if (xhr) { //写入参数 xhr.open('POST', "http://localhost:8080/test?p1="+arg1, true);//异步调用 发送给Qt端 xhr.onreadystatechange = function(evtXHR){ if (xhr.readyState == 4) { if (xhr.status == 200) {//如果发送成功 var response = xhr.responseText;//获取Qt返回值 作为新建列表的标题 alert(response) $("#list1").append('<li><a href="#">Inbox<span class="ui-li-count">'+response+'</span></a></li>'); $("#list1").listview("refresh"); } else { alert( "不允许跨域请求。" + xhr.status+xhr.responseText); } } }; xhr.send(null); } else { alert("Sorry!程序出错!Code Postion:XML ERROR:1") } // alert("end"); } $(function(){ $("button").click(function(){ 异步CALL_Test(123); }); });
相关文章推荐
- QT下中文显示乱码解决办法
- Qt5实现简单的拼图游戏
- Qt实现自定义按钮的三态效果
- Qt学习笔记之图片显示(自动调整大小适应设计的范围)
- Qt学习笔记之使用HTML在TextEdit中构造表格显示数据
- Qt:让程序实现单例模式,只能打开一次
- Qt学习笔记之数据库的访问
- 在Qt中使用ActiveX控件
- Qt学习笔记之数据库的连接
- Homebrew 1.0.0 发布,MacOS 上的包管理器,比如安装qt5keychain
- QT中实现定时器
- QtCreator调试环境搭建
- Qt exec()做了什么
- Qtcreator 调试cmake
- Qt 访问网络的 HttpClient(封装QNetworkAccessManager,且有服务端)
- qt各版本下载地址
- 深度解析Qt中动态链接库
- qt实现二维码生成
- qt下操作串口
- qt下使用sqlite数据库存储二进制文件