QML和JS引擎的关系以及调用c++函数的原理

Posted wzxnote

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QML和JS引擎的关系以及调用c++函数的原理相关的知识,希望对你有一定的参考价值。

首先推荐几篇博客

1.深入解析QML引擎, 第1部分:QML文件加载

https://www.cnblogs.com/wzxNote/p/10569535.html

2.深入解析QML引擎, 第2部分: 绑定(Bindings)

https://www.cnblogs.com/wzxNote/p/10569542.html

3.深入解析QML引擎, 第3部分: 绑定类型

https://www.cnblogs.com/wzxNote/p/10569547.html

4.深入解析QML引擎, 第4部分: 自定义解析器

https://www.cnblogs.com/wzxNote/p/10569554.html

这四篇博文由浅入深的讲述了QML引擎的实现机制。

1.QML文件的加载过程涉及到QML文件的解析,js代码的解释;

2.绑定讲解了QML的属性绑定,通过VME模块创建的指令.生成一个QQmlBinding对象,传入js函数,vme再把传入的函数生成一个v8:Function函数(翻译成二进制的机器码)。通过运行编译后的V8::Function代码来对绑定进行求值,再由V8引擎通过Qt里的包裹类来访问对象和属性,然后将求的值赋给目标属性。

3.因为QV8Bindings把QML文件中所有的绑定组织在一起,所以可以花费更少的内存,并只执行一次编译。QV4Bindings是最快的,因为其使用了自定义的字节码引擎。QV8Bindings和QQmlBinding都是使用V8 JS引擎执行,但QV8Bindings将所有的绑定组织在一起,一次性编译,然而QQmlBindings会在每个QML组件实例化过程中一个一个地进行编译。

以上是关于QML和JS引擎的关系以及调用c++函数的原理的主要内容,如果未能解决你的问题,请参考以下文章

QML和C++混合编程中,在qml中向C++的char* 函数传递一个char*的字符串参数,qml不能识别char*的参数类型

QML和C++混合编程实现以下功能:

如何在创建对象时从 QML 调用任意 C++ 函数?

C++中的奇淫技巧,三种函数调用方法,让小白彻底理解其工作原理

lua 与 c++或者c 交互的底层原理谁能解释一下?最最底层的,为啥它们调用C或者C++的函数?

QML 插槽中未收到 C++ 信号