当前位置: 首页 > news >正文

Qt中字符串转换为JS的函数执行

  简介     

        在 QML 中,将 JavaScript 字符串转换为函数通常涉及使用 Function 构造函数或 eval() 函数。但是,QML 的环境对 JavaScript 的支持有一定的限制,因此不是所有的 JavaScript 功能都可以在 QML 中直接使用。 

        以下介绍都是在Qt5.12.12环境下进行的。

1、qml中使用 Function 构造函数:

在标准的 JavaScript 中,你可以使用 Function 构造函数来从字符串创建函数,如下所示:

var funcString = "return x + y";
var func = new Function('x', 'y', funcString);
console.log(func(1, 2));  // 输出 3
 

2、qml中使用 eval()函数:

eval() 函数可以执行 JavaScript 代码字符串。例如:

var funcString = "function add(x, y) { return x + y; }";
eval(funcString);
console.log(add(1, 2));  // 输出 3

3、qt的C++中使用 QJSEngine

QJSEngine myEngine;
QJSValue fun = myEngine.evaluate("(function(a, b) { return a + b; })");
QJSValueList args;
args << 1 << 2;
QJSValue threeAgain = fun.call(args);
int result = threeAgain.toInt();

qml示例

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import QtQml 2.12Window {width: 1200height: 800visible: truetitle: qsTr("Hello World")objectName: "mainWindow"Rectangle{width: 800height: 300anchors.left: parent.leftanchors.top: parent.topborder.color: "blue"border.width: 1Rectangle {id : funcRectswidth: 700height: 200color: "lightgrey"border.color: "grey"anchors.verticalCenter: parent.verticalCenterTextArea {id: functionTextanchors.fill: parentwrapMode:TextEdit.WrapAnywhereanchors.margins: 2font.pointSize: 15focus: trueclip: truetext: "function  add(x){return x+100;}"selectByMouse: true}}Rectangle {id : funcRects1width: 500height: 50color: "lightgrey"border.color: "grey"anchors.left: funcRects.leftanchors.top: funcRects.bottomRow{Label {id: inputKeytext: qsTr("输入")font.pointSize: 15}TextInput {id: inputParamwidth: 100height: 30anchors.margins: 2font.pointSize: 15focus: trueclip: truetext: "120"selectByMouse: true}Button{text: "转换"onClicked: {var funcString = functionText.text;eval(funcString);var result = add(inputParam.text);console.log(result);onputParam.text = result;}}Label {id: onputKeytext: qsTr("输出")font.pointSize: 15}TextInput {id: onputParamwidth: 100height: 30anchors.margins: 2font.pointSize: 15focus: trueclip: truetext: ""selectByMouse: true}}}}
}

运行结果:

结果1:

输入的 inputParam.text 都按照字符串处理,所以输出结果是 120100

结果2:

   

输入的 inputParam.text 字符串在程序里面转换为int,所以输出结果是 220

http://www.lryc.cn/news/265470.html

相关文章:

  • TCP/IP:从数据包到网络的演变
  • 闪存驱动器与机械硬盘与固态硬盘
  • java String转asc码,然后ascII再转四位的16进制数。
  • 零基础制作宠物用品小程序
  • 【SpringBoot篇】解决缓存击穿问题① — 基于互斥锁方式
  • 系列一、GitHub搜索技巧
  • 35.java后端面试宝典
  • Linux 磁盘空间占满故障解决方法
  • 让生活更智能,P1600边缘智能网关带你进入智能家居新时代
  • Java与前端:2023年的真实状况与焦虑解读
  • adb 基本命令合集
  • [RK-Linux] RK3399支持M.2 NVMe SSD启动
  • LTO-3 磁带机种草终于是用上了
  • 【全网首发】洛谷P1020 [NOIP1999 提高组] 导弹拦截
  • trino-435版本windows下源码编译
  • java类和对象的思想概述
  • ant design vue3中引入message消息提示,全局引入亲测有效
  • UE5 Landscape 制作GIS卫星图地形
  • opencv入门到精通——改变颜色空间
  • 法线贴图实现地形模型皱褶、凹凸不平的纹理效果
  • 【SpringBoot篇】基于Redis实现生成全局唯一ID的方法
  • 轻度听力损失的儿童需要早期干预吗?
  • 【Spring Security】认证密码加密Token令牌CSRF的使用详解
  • python一点通: 一文讲清Post 和 Put操作区别!
  • 通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能
  • 0.618算法和基于Armijo准则的线搜索回退法
  • DPDK单步跟踪(3)-项目配置和单步跟踪
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • vue3 使用addRoute动态添加路由,页面刷新就白屏解决办法
  • 探索鸿蒙:了解华为鸿蒙操作系统的基础课程