目录

官方解析

博主例子


官方解析

编写应用脚本

Qt提供了JavaScript脚本对应用程序的支持。下面将全方位说明JavaScript在Qt中的应用。

Scripting Classes
如下的类为Qt应用程序添加脚本的功能。
QJSEngine:提供运行JavaScript代码的环境
QJSValue:充当Qt/JavaScrpit数据类型的容器
QJSValueIterator:QJSvalue的Java风格的迭代器

基础用法
评估脚本代码,先要创建一个QJSEngine对象,并且调用evaluate()这个函数,通过传递txt的脚本代码进行评估。

 QJSEngine engine;qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber();

返回值将是评估的结果,返回值为QJSValue这对象;这个返回值可以转换为标准C++或者Qt的类型(QVariant)。
通过使用QJSEngine对象注册自定义属性,可以让这个自定义属性在脚本中运行。通过QJSEngine的全局对象可以设置属性,这种骚操作很简单,如下代码:

 engine.globalObject().setProperty("foo", 123);qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();

这里面的自定义属性已经在script环境中了,因此他可以脚本中生效。

把一个QObject对象放入Script引擎中
任何QObject派生类的实例都能放到script里面使用。
当QObject作为参数被QJSEngine::newQObject()调用时,Qt脚本包装器对象被创建,这个对象能够用来制作QObject的信号,槽,各种属性,以及继承树。

举一个栗子,一个QObject的派生类对象可以在脚本代码内命名为"myObject"

engine.globalObject().setProperty("foo", 123);qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();

这里将会创建一个全局的变量,变量名为myObject,并且是在脚本环境中。这个变量充当了底层C++对象的代理。注意,脚本的名称可以是任意的名称等,他与Qbject::objectName()无关

博主例子

对上面例子的实现

源码如下:

myobject.h

#ifndef MYOBJECT_H
#define MYOBJECT_H#include <QObject>class MyObject:public QObject{Q_OBJECT
public:MyObject(QObject *parent=0):QObject(parent){m_myValue=9999;}~MyObject(){}int m_myValue;
};#endif // MYOBJECT_H

main.cpp

#include <QJSEngine>
#include <QObject>
#include <QApplication>
#include <QJSValue>
#include <QDebug>
#include "myobject.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);QJSEngine engine;qDebug()<<"The value is "<<engine.evaluate("1+2").toNumber();engine.globalObject().setProperty("foo",123);qDebug()<<"foo times two is "<<engine.evaluate("foo*2").toNumber();QObject *someObject=new MyObject;QJSValue objectvalue=engine.newQObject(someObject);engine.globalObject().setProperty("myObject",objectvalue);qDebug()<<"QObject *someObject pointer address is "<<someObject;qDebug()<<"Engine.evaluate(\"myObject\"):"<<engine.evaluate("myObject").toQObject();MyObject *myObject=qobject_cast<MyObject*>(engine.evaluate("myObject").toQObject());qDebug()<<"The value is "<<myObject->m_myValue;return a.exec();
}

Qt文档阅读笔记-编写应用脚本解析与实例相关推荐

  1. Qt文档阅读笔记-GridLayout QML Type解析与实例

    目录 基本概念 代码与实例 基本概念 如果QGridLaout大小被调整,所有item的布局都将会重新排列.和widget的QGridLayout一样.如果想要一行或一列的布局可以使用RowLayou ...

  2. Qt文档阅读笔记-Image QML官方解析与实例

    目录 官方解析 博主例子 官方解析 Image Image用于展示图片. 使用source属性可以使用URL指定一张图片. 只要是Qt能打开的图片都支持,如果要展示动态图,要使用:BnimatedSp ...

  3. Qt文档阅读笔记-Widgets Tutorial官方解析及实例

    目录 官方解析 博主栗子 官方解析 QWiget通常作为其他窗口的容器,可以使用QWidget到达最小代价定义自定义控件(经验:通常可以采用子类QLabel做成自定义控件) 可以通过构建他的父类对象来 ...

  4. Qt文档阅读笔记-easingCurve:QEasingCurve官方解析及实例

    目录 官方解析 博主例子 官方解析 easingCurve:QEasingCurve 这个属性保留了动画的缓和曲线. 他定义了缓和取消,默认情况下,使用线性缓和曲线,产生线性插入值.下面举出其他曲线的 ...

  5. Qt文档阅读笔记-Object Trees Ownership解析与实例(为何某些程序在被关闭的时候会崩溃)

    目录 官方解析 Construction/Destruction Order of QObjects 博主栗子 继承里面构造函数与析构函数的顺序 在Qt中,object trees里面的创建与析构 [ ...

  6. Qt文档阅读笔记-The Meta-Object System解析及实例

    目录 官方解析 博主栗子 关于QMetaObject::className()的栗子 官方解析 Qt元对象系统提供了信号与槽机制,通过信号与槽实现对象间的通信,RTTI,以及动态属性系统. meta- ...

  7. Qt文档阅读笔记-QML RotationAnimation官方解析及实例

    目录 官方解析 博主例子 官方解析 RotationAnimation是一个属性动画,这个属性控制图片的旋转. 默认情况下,他在给定的数值方向上旋转,比如从0度顺时针旋转到240度,也可以逆时针旋转比 ...

  8. Qt文档阅读笔记-QHeaderView::sectionResized官方解析与实例

    目录 官方解析 博主例子 官方解析 不翻译了,很简单的英语 博主例子 程序运行截图如下 源码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include ...

  9. Qt文档阅读笔记-Broadcast Sender Example解析

    此例子展示了使用Qt Network API发送广播包 程序结构如下: 代码如下: sender.h #ifndef SENDER_H #define SENDER_H#include <QWi ...

最新文章

  1. 企业不要求工程师资格认证_谁说工程师不能成为企业家?
  2. 隐马尔科夫模型(HMM)解释 和 前向与后向算法[转] 讲解通俗易懂 赞
  3. spring boot 学习(二)spring boot 框架整合 thymeleaf
  4. 选择嵌套_Python if语句嵌套(入门必读)
  5. 【Linux网络编程】广播
  6. IntelliJ IDEA 2020.2 正式发布,真香!
  7. java考试填空题_Java常用考试(填空题)
  8. 蓝桥杯.历届试题: 错误票据
  9. detachedcriteria查询去重_sql的简单查询
  10. C++multiset集合
  11. TCP协议最大字节数计算
  12. 基于51单片机超声波测距仪倒车雷达报警器汽车防撞系统套件
  13. 计算机图形学-消隐算法
  14. python数据拟合方法_Python-最小二乘法曲线拟合
  15. 深度学习环境配置10——Ubuntu下的torch==1.7.1环境配置
  16. CentOS-6.2安装Nvidia显卡驱动
  17. 随机过程、马尔可夫链 详解
  18. cloudant_多租户服务的Cloudant最佳做法
  19. linux 硬盘写保护,linux – mount:无法重新安装块设备/ dev / sda5读写,是写保护的...
  20. SWEBOK软件工程知识体系 - 13.计算基础

热门文章

  1. 转-开源云API竞争大幕开启
  2. Silverlight Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)...
  3. HR怎么从面试中了解程序员的真实水平?需要面试的程序员,注意了!
  4. 为什么大部分的C/C++码农都成不了高级工程师?真实原因是缺少核心能力!
  5. 没有报表和数据分析,银行数据仓库只能是一盘散沙
  6. 成就优秀程序员的很多因素你知道多少?
  7. 地域跨度入手的8zsb
  8. 声明变量baijq的HTML5同时
  9. 请珍爱自己的身体搞开发的兄弟们
  10. CSS选择器必备的3个知识点