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#includeclass 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月12日 13时12分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Deeplab v3
2019-04-30
Cityscapes数据集
2019-04-30
Pytorch之经典神经网络CNN(六) —— NiN (Fashion-MNIST)
2019-04-30
NLP 之 Perplexity困惑度
2019-04-30
tensor/矩阵/图片等更换通道,调整size
2019-04-30
Py4J
2019-04-30
本地和colab 中 改变tensorflow的版本
2019-04-30
什么是端到端(end-to-end)的神经网络
2019-04-30
NAS(Neural Architecture Search) 神经结构搜索
2019-04-30
NLP 之 CRF(条件随机场)
2019-04-30
SOTA model
2019-04-30
ablation study 消融实验/消融研究
2019-04-30
ICDAR数据集
2019-04-30
Pytorch(十四) —— hook
2019-04-30
GPT (OpenAI GPT)
2019-04-30
linux(ubuntu)切换用户后出现 -bash-$
2019-04-30
Camera-ready ddl
2019-04-30
NLP之N-Gram模型
2019-04-30
CIFAR-100数据集
2019-04-30