Qt Script
旧项目运行在Qt4.x上,要加上一个脚本逻辑,只能上Qt Script.(建议新项目使用QJSEngine)
QT += script
#include <QtScript>
int cpp_func(int a, int b)
{
return a + b;
} QScriptValue cpp_func_wrapper(QScriptContext *ctx, QScriptEngine *eng)
{
int a = ctx->argument(0).toInt32();
int b = ctx->argument(1).toInt32();
return cpp_func(a, b);
}
QScriptEngine engine;
//向js中传递全局可用数据
engine.globalObject().setProperty("name", "liyangyao");
//向js中传递全局可用函数指针 (需要经过一层包装, 符合签名)
QScriptValue cpp_func_ref = engine.newFunction(cpp_func_wrapper);
engine.globalObject().setProperty("cpp_func", cpp_func_ref); //载入js
QString script = readScript(":/script.js");
QScriptValue object = engine.evaluate(script);
if (object.isError())
{
qDebug()<<"line:"<<object.property("lineNumber").toInt32()<<" error:"<<object.toString();
return 0;
} //调用js中的全局函数
qDebug()<<"execute script time:"<<time(NULL);
QScriptValue func = engine.globalObject().property("js_func");
if (func.isValid())
{
QScriptValue result = func.call(object, QScriptValueList()<<17);
qDebug()<<"js_func return->"<<result.toString();
//获取js中的全局变量
qDebug()<<"context="<< engine.globalObject().property("context").toString();
}
else{
qDebug()<<"js_func is not valid";
}
Qt Script的更多相关文章
- Qt的Script、Quick、QML的关系与总结
背景 最近在学QML,感觉也不难,就是一直以来接触 Qt 的脚本类的东西的顺序是Script.Quick1.Declarative.Quick2.QML.那么每一个都是干什么的呢,这些东西搞的我有点混 ...
- Qt工具知多少(一目了然)
一级题目: Qt Designer — 所见即所得的界面设计工具, 可以用拖拽的方式将控件排布在界面上,支持layout, 支持signal/slot编辑. 生成的文件保存为ui格式, ui是xml格 ...
- Qt事件处理机制
研一的时候开始使用Qt,感觉用Qt开发图形界面比MFC的一套框架来方便的多.后来由于项目的需要,也没有再接触Qt了.现在要重新拾起来,于是要从基础学起. Now,开始学习Qt事件处理机制. 先给出原文 ...
- 关于Qt
什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry ...
- 【Qt】关于Qt【转】
什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry ...
- Qt的版本历史
发展史 Qt的第一个商业版本于1995年推出,随后Qt的发展就很快了,下面是Qt发展史上的一 些里程碑,从之前的Qt1.x开始到现在的Qt5.x. Qt1-3 版本 发布日期 1.40 10 July ...
- Qt之QtScript(一)
C++和JavaScript相互通信.今天就学习QtScript模块吧. Qt 包含完全集成的 ECMA 标准脚本引擎.Qt Script 集成了 QObject,为脚本提供了 Qt 的信号与槽 (S ...
- Qt 之 QtScript
前言 前面学习中,很多地方都用到了C++和JavaScript相互通信.今天就学习QtScript模块吧. Qt 包含完全集成的 ECMA 标准脚本引擎.Qt Script 集成了 QObject,为 ...
- 【Qt】测测你对Qt的了解–Qt工具知多少
原文:http://blog.163.com/lijiji_1515/blog/static/1268774462009103101944455/ 你知道Qt都提供了哪些工具吗? 你知道Qt的 ...
随机推荐
- 转载事务在C#方法里的应用
问题:一个系统的数据库更新或者插入的时候若遭遇到断电等能引起数据库不能正常工作的情况的话,其更新或插入的将是不完整的数据,或者是错误的数据.故需要引入事务处理. 实例:数据更新的事务处理. 解决方案: ...
- iOS开发那些事-iOS应用本地化-文本信息本地化
文本信息本地化在本地化工作中占有很大的比例.包括了:应用名称本地化.系统按钮和信息本地化,以及静态文本信息本地化. 系统按钮和信息本地化 还记得天气预报应用背后的“完成”按钮吗,它在中文环境下是“完成 ...
- iOS-图片拉伸,最常用的图片拉伸操作总结(干货)
概念介绍 直接拉伸图片有时候会导致图片四周变的很模糊 所以要想办法使图片四周的形状不变.于是,端盖(end cap)的概念出来了,用来指定图片中的哪一部分不用拉伸.比如下图中,黄色代表需要被拉伸的矩形 ...
- 页面传值总结Block
// AppDelegate.m // 页面传值总结 // // Created by qianfeng on 15/6/13. // Copyright (c) 2015年 qianfeng. Al ...
- AMQ学习笔记 - 07. 持久性订阅
概述 一般的订阅,订阅者必须时刻处于活跃状态,才不会遗漏任何信息:持久性订阅,当订阅者处于非活动状态时,代理会为它们保留信息,下一次连接之后推送给它们. 持久订阅 与一般的定于相比,持久性订阅需要: ...
- JAVA作业-1
编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果. import javax.swing.JOptionPane; // import class JOptionPane publ ...
- double与int类型自动转换
package com.abc.test; public class SumTest { public static void main(String[] args) { //题目A:2+4+6+8+ ...
- 济南学习 Day1 T3 pm
[问题描述]小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在x轴正半轴和y轴正半轴分别挑选
- OpenGL第12-14讲小结
首先要为自己为什么没有写第10讲的控制3D场景和第11讲的红旗飘飘呢?因为没看啊~哈哈哈,而且我尝试着运行红旗飘飘的时候电脑蓝屏了(可能不是它的锅),暂时跳过了. 恩,12到14主要了解了这么些东西, ...
- IPv6协议介绍
IPv6是为了解决基于IPv4的TCP/IP协议簇遇到的问题而推出的下一代IP协议.由于IPv4中采用的编制方式使得可用的网络地址和主机地址的数目远低于理论数目,随着全球互联网的快速发展,现有的IPv ...