Qt和JS的交互
参考文章:https://www.cnblogs.com/lgxZJ/archive/2017/12/31/8158132.html
Qt和JavaScript的交互
Qt提供了对JS的良好支持,有两种方式:
AScriptEngine- 4.3开始引入,现已被官方抛弃;
QJSEngine- 5.0引入;
- 封装了
V8引擎;
Qt中执行脚本
QJSValue QJSEngine::evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1);
program:脚本代码
fileName/lineNumber:出错的时候包含在出错信息里
示例:
function test(){
return "123"
}
test();
QFile file("debug/JSTest.js");
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return;
}
QString js_code = file.readAll();
file.close();
QJSEngine engine;
QJSValue result = engine.evaluate(js_code); //执行脚本
QString str_result = result.toString(); //"123"
Qt对脚本的动态控制
Qt中执行脚本,是将脚本代码组成字符串,借此,可以动态控制脚本的代码逻辑
QString js_code = QString("%1/%2").arg(10).arg(2);
qDebug()<<js_code; //10/2
QJSValue result = engine.evaluate(js_code);
qDebug()<<result.toString(); //5
配置JS的全局变量
QJSValue QJSEngine::globalObject() const; Returns this engine's Global Object.
void QJSValue::setProperty(const QString &name, const QJSValue &value); Sets the value of this QJSValue's property with the given name to the given value.
通过globalObject()方法获取引擎的全局对象,再使用setProperty()方法设置全局属性,该属性可以在js脚本中使用。
Qt的脚本化
QJSValue QJSEngine::newQObject(QObject *object); Creates a JavaScript object that wraps the given QObject object, using JavaScriptOwnership.
Signals and slots, properties and children of object are available as properties of the created QJSValue.
使用newQObject函数,将Qt类封装成js对象,集成在js的引擎中。
Qt的信号槽、属性和子对象都可以封装。
将Qt的类封装起来,再通过全局属性将其传给js脚本,可以实现js和Qt的交互。
示例:
edit.setText("This is test");
QFile file("debug/JSTest.js");
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return;
}
QString js_code = file.readAll();
file.close();
QJSEngine engine;
engine.globalObject().setProperty("edit", engine.newQObject(ui->lineEdit));
QJSValue result = engine.evaluate(js_code); //执行脚本
将ui->lineEdit控件封装并传给js,在脚本中调用,运行后,界面的lineEdit控件上会出现This is test文字。
Qt和JS的交互的更多相关文章
- Qt与JS(三)
Qt不错的学习网址: http://www.cnblogs.com/findumars/p/5529526.html ----------------------------------------- ...
- Qt和JavaScript使用QWebChannel交互一——和Qt内嵌网页交互
Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 目录 Qt和JavaScript使用QWebChannel交互一--和Qt内嵌网页交互 前言 一.效果 二.实现过程 ...
- android 从 phonegap 到 js webview 交互
像生活类.办公协同类. 动态添加,下载等. 1.phonegap 我这里用了旧的版本,可能新版本变化大了. 创建asset资源文件夹,然后新建index.html copy 相应的js 文件进来. 创 ...
- [转]OC与JS的交互详解
事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...
- Android与H5交互(java与js的交互)
一.理论概述 1.js调用java方法 直接调用WebView的该方法就可以添加接口了,不过先要启动交互 // 启用javascript mWebView.getSettings().setJavaS ...
- android code 和js的交互
小弟现在需要android code 和js的交互.出现了问题,求大家带一带啊. 我的页面:<!DOCTYPE html><html lang="en">& ...
- iOS中使用UIWebView与JS进行交互
iOS中使用UIWebView与JS进行交互 前一段忙着面试和复习,这两天终于考完试了,下学期的实习也有了着落,把最近学的东西更新一下,首先是使用UIWebView与JS进行交互 在webView中我 ...
- Adriod与HTML+JS的交互
本篇主要实现的功能点: Android 调用HTML中的javascript脚本 HTML中的javascript脚本调用Android本地代码 Android 调用HTML中的javascript脚 ...
- 在Ubuntu15.10中,使用wxPython的webview和JS进行交互
在Ubuntu下进行wxPython开发,因为需求,所以使用了wxPython的webview和JS的交互. 在Windows下,下图显示的代码可以正常的运行,但是在Ubuntu下进行开发,以下的代码 ...
随机推荐
- matlab计算样本熵
计算14通道得脑电数据吗,将得出的样本熵插入Excel表格 a = zeros(1,14); b = a'; for i =1:14 b(i) = SampEn(d1_1(i,1:3000),2,0. ...
- 教你如何在工作中“偷懒”,python优雅的帮你解决
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...
- L4文本预处理
文本预处理 timemachine.txt数据下载地址 链接:https://pan.baidu.com/s/1RO2OLyTRQZ90HJUW7V7BCQ 提取码:bjox NLTK数据集下载 链接 ...
- Gun N' Rose Team Review
一看到这个项目就被他的功能给吸引了.回忆起以前看到一个东西很新奇想去网上查询它是什么,但是又不知道应该怎样去描述它,于是在搜索引擎的输入框中键入.删除.键入.删除的可笑经历的时候,我就越发感觉到这个a ...
- A. Number Theory Problem
题目大意:计算小于2^n,且满足2^k-1并且是7的倍数的个数 思路:优先打表,数据不大,1e5,然后求个前n项和 #include<bits/stdc++.h> using namesp ...
- python3 xlwt,csv学习
前言 对于抓取一些站点分析然后指纹识别的时候可能用到到它.所以学习下.这里就记录一些最基本的感觉有用的. xlwt 基本创建 demo: #coding=utf- import xlwt yunyin ...
- 初探Redis-基础类型String
Redis存在五种基础类型:字符串(String).队列(List).哈希(Hash).集合(Set).有序集合(Sorted Set).String的出镜率算是最高的.本次列举出String的常用操 ...
- go获取当前项目下所有依赖包
在设置好GOPATH,GOROOT的环境变量的情况下. 在项目配置好pkg.bin.src等这几个目录的情况,进入src目录. 在终端,输入:go get ./... 即可获得所有依赖包.
- Netty源码分析之ChannelPipeline—异常事件的传播
ChannelHandler中异常的获取与处理是通过继承重写exceptionCaught方法来实现的,本篇文章我们对ChannelPipeline中exceptionCaught异常事件的传播进行梳 ...
- 调用ocx ActiveX控件详解(做一个简单的ocx控件)
背景 最近做的项目都和插件有关,就是在页面中调用插件的方法,然后进行操作. 插件就是ocx ActiveX控件,具体的说明可以自己去了解一下,在这里就不做赘述. 具体调用方式很简单: 1.在页面中写一 ...