Qt文档阅读笔记-编写应用脚本解析与实例
发布日期:2021-06-30 10:56:36 浏览次数:2 分类:技术文章

本文共 1689 字,大约阅读时间需要 5 分钟。

目录


官方解析

编写应用脚本

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 
class MyObject:public QObject{ Q_OBJECTpublic: MyObject(QObject *parent=0):QObject(parent){ m_myValue=9999; } ~MyObject(){} int m_myValue;};#endif // MYOBJECT_H

main.cpp

#include 
#include
#include
#include
#include
#include "myobject.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); QJSEngine engine; qDebug()<<"The value is "<
(engine.evaluate("myObject").toQObject()); qDebug()<<"The value is "<
m_myValue; return a.exec();}

 

转载地址:https://it1995.blog.csdn.net/article/details/82762445 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt文档阅读笔记-Q_PROPERTY解析及实例
下一篇:C++/Qt工作笔记-static_cast在connect函数中的运用

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月12日 13时12分52秒