Qt文档阅读笔记-编写应用脚本解析与实例
目录
官方解析
博主例子
官方解析
编写应用脚本
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文档阅读笔记-编写应用脚本解析与实例相关推荐
- Qt文档阅读笔记-GridLayout QML Type解析与实例
目录 基本概念 代码与实例 基本概念 如果QGridLaout大小被调整,所有item的布局都将会重新排列.和widget的QGridLayout一样.如果想要一行或一列的布局可以使用RowLayou ...
- Qt文档阅读笔记-Image QML官方解析与实例
目录 官方解析 博主例子 官方解析 Image Image用于展示图片. 使用source属性可以使用URL指定一张图片. 只要是Qt能打开的图片都支持,如果要展示动态图,要使用:BnimatedSp ...
- Qt文档阅读笔记-Widgets Tutorial官方解析及实例
目录 官方解析 博主栗子 官方解析 QWiget通常作为其他窗口的容器,可以使用QWidget到达最小代价定义自定义控件(经验:通常可以采用子类QLabel做成自定义控件) 可以通过构建他的父类对象来 ...
- Qt文档阅读笔记-easingCurve:QEasingCurve官方解析及实例
目录 官方解析 博主例子 官方解析 easingCurve:QEasingCurve 这个属性保留了动画的缓和曲线. 他定义了缓和取消,默认情况下,使用线性缓和曲线,产生线性插入值.下面举出其他曲线的 ...
- Qt文档阅读笔记-Object Trees Ownership解析与实例(为何某些程序在被关闭的时候会崩溃)
目录 官方解析 Construction/Destruction Order of QObjects 博主栗子 继承里面构造函数与析构函数的顺序 在Qt中,object trees里面的创建与析构 [ ...
- Qt文档阅读笔记-The Meta-Object System解析及实例
目录 官方解析 博主栗子 关于QMetaObject::className()的栗子 官方解析 Qt元对象系统提供了信号与槽机制,通过信号与槽实现对象间的通信,RTTI,以及动态属性系统. meta- ...
- Qt文档阅读笔记-QML RotationAnimation官方解析及实例
目录 官方解析 博主例子 官方解析 RotationAnimation是一个属性动画,这个属性控制图片的旋转. 默认情况下,他在给定的数值方向上旋转,比如从0度顺时针旋转到240度,也可以逆时针旋转比 ...
- Qt文档阅读笔记-QHeaderView::sectionResized官方解析与实例
目录 官方解析 博主例子 官方解析 不翻译了,很简单的英语 博主例子 程序运行截图如下 源码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include ...
- Qt文档阅读笔记-Broadcast Sender Example解析
此例子展示了使用Qt Network API发送广播包 程序结构如下: 代码如下: sender.h #ifndef SENDER_H #define SENDER_H#include <QWi ...
最新文章
- 企业不要求工程师资格认证_谁说工程师不能成为企业家?
- 隐马尔科夫模型(HMM)解释 和 前向与后向算法[转] 讲解通俗易懂 赞
- spring boot 学习(二)spring boot 框架整合 thymeleaf
- 选择嵌套_Python if语句嵌套(入门必读)
- 【Linux网络编程】广播
- IntelliJ IDEA 2020.2 正式发布,真香!
- java考试填空题_Java常用考试(填空题)
- 蓝桥杯.历届试题: 错误票据
- detachedcriteria查询去重_sql的简单查询
- C++multiset集合
- TCP协议最大字节数计算
- 基于51单片机超声波测距仪倒车雷达报警器汽车防撞系统套件
- 计算机图形学-消隐算法
- python数据拟合方法_Python-最小二乘法曲线拟合
- 深度学习环境配置10——Ubuntu下的torch==1.7.1环境配置
- CentOS-6.2安装Nvidia显卡驱动
- 随机过程、马尔可夫链 详解
- cloudant_多租户服务的Cloudant最佳做法
- linux 硬盘写保护,linux – mount:无法重新安装块设备/ dev / sda5读写,是写保护的...
- SWEBOK软件工程知识体系 - 13.计算基础