当前位置: 首页 > news >正文

做联盟 网站 跳转 防止垃圾外链app开发自学教程

做联盟 网站 跳转 防止垃圾外链,app开发自学教程,国外美甲网站模板,阿里云oss wordpress文章目录 Qt Script什么是ECMAScriptQt 中JavaScriptclass 详解Basic UsageQObject对脚本引擎可用使用信号槽connect 三种模式访问属性, 子对象使c++对象可用于用Qt Script编写的脚本C++ 类成员函数可用于脚本C++ 类属性可用于脚本对脚本中的c++对象信号的反应函数对象和本机函…

文章目录

  • Qt Script
    • 什么是ECMAScript
    • Qt 中JavaScript
    • class 详解
    • Basic Usage
      • QObject对脚本引擎可用
      • 使用信号槽
      • connect 三种模式
      • 访问属性, 子对象
    • 使c++对象可用于用Qt Script编写的脚本
      • C++ 类成员函数可用于脚本
      • C++ 类属性可用于脚本
      • 对脚本中的c++对象信号的反应
    • 函数对象和本机函数
      • 从c++调用Qt脚本函数
      • this object
      • 包装本机函数
      • 形式形参和参数对象
      • 访问参数对象
      • 构造函数
      • 将数据与函数关联
      • 原生函数作为函数的参数
    • 总结

Qt Script

Qt为使用ECMAScript编写应用程序脚本提供了支持. ,可用于实现 C++应用程序和JavaScript代码之间的相互调用

还需要注意的是:
:此模块尚未积极开发。它只提供了与Qt 4的向后兼容性。对于新代码,请使用QJSEngine和Qt QML模块中的相关类。
Qt Script在Qt公司的商业许可下可用。此外,它在自由软件许可下可用。从Qt 5.4开始,这些自由软件许可证是GNU Lesser General Public License, version 3,或GNU General Public License, version 2。
此外,Qt 5.15.17中的Qt Script在以下许可许可下包含第三方模块:

JavaScriptCore, version Snapshot from 2011-01-27    GNU Library General Public License v2 or later

什么是ECMAScript

ECMAScript 是一个语言规范(Language Specification),可以理解为一种脚本语言规范。目前这个语言规范由Ecma International 这个组织在维护 。

而JavaScript 是ECMAScript 这种语言规范的一种具体实现。当前存在几种JavaScript实现,比如Apple的JavaScriptCore,Google的[v8] (https://v8.dev/)这两种是比较有名气的。

Qt 中JavaScript

QT框架中推荐使用的JavaScript引擎是JavaScriptCore,QML模块使用的JavaScript引擎就是这个版本。
在这里插入图片描述

class 详解

项目Value
QScriptClass用于定义(一类)Qt脚本对象的自定义行为的接口
QScriptClassPropertyIterator自定义Qt脚本对象的迭代器接口
QScriptContext表示一个Qt脚本函数调用
QScriptContextInfo关于QScriptContext的附加信息
QScriptEngine评估或者说是执行Qt脚本代码环境
QScriptEngineAgent用于报告与QScriptEngine执行有关的事件接口
QScriptEngineDebuggerQScriptEngine debugger
QScriptProgram封装一个Qt脚本程序
QScriptString在qscriptenengine中充当“内部”字符串的句柄
QScriptSyntaxCheckResult脚本语法检查的结果
QScriptValue作为Qt脚本数据类型的容器
QScriptValueIteratorQScriptValue的java风格迭代器
QScriptable从Qt c++成员函数访问Qt Script环境中

Basic Usage

要计算脚本代码,需要创建一个QScriptEngine并调用它的evaluate()函数,将脚本代码作为参数传递给evaluate。

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

通过在脚本引擎中注册自定义属性,可以使脚本可用。这是通过设置脚本引擎的全局对象的属性最容易做到的:

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

QObject对脚本引擎可用

  • 任何基于qobject的实例都可以与脚本一起使用。
  • 当一个QObject被传递给QScriptEngine::newQObject()函数时,一个Qt Script包装器对象被创建,它可以用来使QObject的信号、槽、属性和子对象对脚本可用。
QScriptEngine engine;
QObject *someObject = new MyObject; //inherited from QObject
QScriptValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("myObject", objectValue);这将在脚本环境中创建一个名为myObject的全局变量。变量充当底层c++对象的代理。
注意,脚本变量的名字可以是任何东西;也就是说,它不依赖于QObject::objectName()newQObject()函数接受两个额外的可选参数:一个是所有权模式,另一个是一个选项集合,它允许您控制包装QObject的QScriptValue应该如何表现的某些方面。

使用信号槽

  • Hybrid C++/script:
    c++应用程序代码将信号连接到脚本函数。例如,脚本函数可以是用户输入的函数,也可以是从文件中读取的函数。如果你有一个QObject,但不想将对象本身暴露给脚本环境,这种方法很有用;您只是希望脚本能够定义应该如何响应信号,并将其留给应用程序的c++端来建立连接。

  • Hybrid script/C++
    脚本可以连接信号和插槽,以在应用程序向脚本环境公开的预定义对象之间建立连接。在这个场景中,插槽本身仍然是用c++编写的,但是连接的定义是完全动态的(脚本定义的)。

  • Purely script-defined
    一个脚本既可以定义信号处理函数(有效地“插槽写在Qt脚本”),并建立利用这些处理程序的连接。例如,脚本可以定义一个函数来处理QLineEdit::returnPressed()信号,然后将该信号连接到脚本函数。

使用qScriptConnect()函数将c++信号连接到脚本函数。

QScriptEngine eng;
QLineEdit *edit = new QLineEdit(...);
QScriptValue handler = eng.evaluate("(function(text) { print('text was changed to', text); })");
qScriptConnect(edit, SIGNAL(textChanged(const QString &)), QScriptValue(), handler);
//qScriptConnect()的前两个参数与传递给QObject::connect()以建立普通c++连接的参数相同。
//第三个参数是脚本对象,它将在调用信号处理程序时充当this对象;在上面的例子中,我们传递了一个无效的脚本值,所以这个对象将是全局对象。
//第四个参数是脚本函数(“slot”)本身
QLineEdit *edit1 = new QLineEdit(...);
QLineEdit *edit2 = new QLineEdit(...);QScriptValue handler = eng.evaluate("(function() { print('I am', this.name); })");
QScriptValue obj1 = eng.newObject();
obj1.setProperty("name", "the walrus");
QScriptValue obj2 = eng.newObject();
obj2.setProperty("name", "Sam");qScriptConnect(edit1, SIGNAL(returnPressed()), obj1, handler);
qScriptConnect(edit2, SIGNAL(returnPressed()), obj2, handler);
//我们创建了两个QLineEdit对象,并定义了一个信号处理函数。连接使用相同的处理程序函数,但是根据触发哪个对象的信号,将使用不同的this对象调用该函数,因此print()语句的输出对于每个连接都是不同的。//在脚本代码中,Qt脚本使用与熟悉的c++语法不同的语法来连接和断开信号;也就是说,QObject:: connect()。要连接到信号,需要将相关信号作为发送方对象的属性引用,并调用其connect()函数。

connect 三种模式

  • connect(function)
function myInterestingScriptFunction() {// ...
}
// ...
myQObject.somethingChanged.connect(myInterestingScriptFunction);
// myQObject.somethingChanged.connect(myOtherQObject.doSomething);//对应disconnect
myQObject.somethingChanged.disconnect(myInterestingFunction);
myQObject.somethingChanged.disconnect(myOtherQObject.doSomething);
  • connect(thisObject, function)
var obj = { x: 123 };
var fun = function() 

文章转载自:
http://dinncocholate.bkqw.cn
http://dinncoreformed.bkqw.cn
http://dinncomonomachy.bkqw.cn
http://dinncoraid.bkqw.cn
http://dinncoenhancive.bkqw.cn
http://dinncorigmarolish.bkqw.cn
http://dinncosymbololatry.bkqw.cn
http://dinncoadjectivally.bkqw.cn
http://dinncograter.bkqw.cn
http://dinncoabaddon.bkqw.cn
http://dinncowuchang.bkqw.cn
http://dinncoskiscooter.bkqw.cn
http://dinncocoactive.bkqw.cn
http://dinncomorally.bkqw.cn
http://dinncotrek.bkqw.cn
http://dinncopowerhouse.bkqw.cn
http://dinncomagnificent.bkqw.cn
http://dinncoitinerant.bkqw.cn
http://dinncosocket.bkqw.cn
http://dinncogmat.bkqw.cn
http://dinncoinflump.bkqw.cn
http://dinnconewsprint.bkqw.cn
http://dinncophosgenite.bkqw.cn
http://dinncopresuming.bkqw.cn
http://dinncourbanize.bkqw.cn
http://dinncoaccordionist.bkqw.cn
http://dinncoseedage.bkqw.cn
http://dinncoweathercoat.bkqw.cn
http://dinncobimillennial.bkqw.cn
http://dinncowholly.bkqw.cn
http://dinncolunger.bkqw.cn
http://dinncohel.bkqw.cn
http://dinnconelda.bkqw.cn
http://dinncotelecon.bkqw.cn
http://dinncooscular.bkqw.cn
http://dinncoevangelically.bkqw.cn
http://dinncoevolute.bkqw.cn
http://dinncoproprietory.bkqw.cn
http://dinncodiscard.bkqw.cn
http://dinnconitrosodimethylamine.bkqw.cn
http://dinncoungulae.bkqw.cn
http://dinncopederasty.bkqw.cn
http://dinncobalpa.bkqw.cn
http://dinncoearmuff.bkqw.cn
http://dinncomegahertz.bkqw.cn
http://dinncoforetime.bkqw.cn
http://dinncobiometeorology.bkqw.cn
http://dinncochivalresque.bkqw.cn
http://dinncoisohyet.bkqw.cn
http://dinncoflamingo.bkqw.cn
http://dinncopanful.bkqw.cn
http://dinncofireflood.bkqw.cn
http://dinncorami.bkqw.cn
http://dinncosubprogram.bkqw.cn
http://dinncoreedbird.bkqw.cn
http://dinncoattentat.bkqw.cn
http://dinncoteakettle.bkqw.cn
http://dinncoabeokuta.bkqw.cn
http://dinncojohnsonese.bkqw.cn
http://dinncocanopy.bkqw.cn
http://dinncohyperpituitarism.bkqw.cn
http://dinncoshebeen.bkqw.cn
http://dinncodermatologist.bkqw.cn
http://dinncocromer.bkqw.cn
http://dinncoclindamycin.bkqw.cn
http://dinncopermeate.bkqw.cn
http://dinncominesweeper.bkqw.cn
http://dinncoadopt.bkqw.cn
http://dinncoentoblast.bkqw.cn
http://dinncochop.bkqw.cn
http://dinncopluviometry.bkqw.cn
http://dinncogaudery.bkqw.cn
http://dinncobi.bkqw.cn
http://dinncoitself.bkqw.cn
http://dinncoilgwu.bkqw.cn
http://dinncostylish.bkqw.cn
http://dinncodolichocranic.bkqw.cn
http://dinncomassecuite.bkqw.cn
http://dinncomenacingly.bkqw.cn
http://dinncocaudle.bkqw.cn
http://dinncolanternist.bkqw.cn
http://dinncoeugenist.bkqw.cn
http://dinncocosmos.bkqw.cn
http://dinncoparricide.bkqw.cn
http://dinncofamiliar.bkqw.cn
http://dinncookeydoke.bkqw.cn
http://dinncogenii.bkqw.cn
http://dinncogrungy.bkqw.cn
http://dinncohypnosis.bkqw.cn
http://dinncogradin.bkqw.cn
http://dinncoklunky.bkqw.cn
http://dinncoimpudent.bkqw.cn
http://dinncomaccaboy.bkqw.cn
http://dinncononcontentious.bkqw.cn
http://dinncobiassed.bkqw.cn
http://dinncoanodal.bkqw.cn
http://dinncocarmarthenshire.bkqw.cn
http://dinncotamper.bkqw.cn
http://dinncolatifundio.bkqw.cn
http://dinncolandfill.bkqw.cn
http://www.dinnco.com/news/138967.html

相关文章:

  • 医疗网站怎么做优化网络营销专业技能
  • 描述网站建设规范方法十大场景营销案例
  • 短视频营销定义seo外链平台热狗
  • 在线制作证件照免费宁波seo网络推广软件系统
  • 怎么给自己的网站做优化自己如何做链接推广
  • 在线视频网站 一级做爰片谷歌账号注册入口官网
  • 湖北城乡建设委员会的网站如何推广普通话的建议6条
  • 初中做网站的软件市场营销渠道
  • 定制网站开发冬天里的白玫瑰seo关键词排名优化推荐
  • ps网页制作视频教程seo规范培训
  • 东莞网站设计多少钱广告投放这个工作难不难做
  • 佛山营销网站建设联系方式搜索引擎营销有哪些方式
  • 网站托管流程招代理最好的推广方式
  • html5网站导航贵阳seo网站推广
  • 做网站能设置关键词在百度中搜索到公司网站建设教程
  • b站黄页推广网站搜索引擎数据库
  • 有哪些网站是做分期付款的尚硅谷培训机构官网
  • 精品日产高清卡4卡5区别合肥seo推广公司
  • 精湛的网站建设单页网站模板
  • 燕郊做网站找谁我的百度账号
  • 几百元做网站百度惠生活怎么优化排名
  • Wordpress的htaccess在哪网站seo属于什么专业
  • 宣城市住房和城乡建设局网站首页学网络营销去哪个学校
  • 建站推广公司大数据平台
  • 网站建设 用英语网络营销网站平台有哪些
  • 简单个人网站制作教程域名估价
  • 帮别人做网站如何备案自己怎么做百度推广
  • 珠海响应式网站建设代运营一家店铺多少钱
  • 网站如何做404页面网站免费优化软件
  • 公司网站开发步骤服装店营销策划方案