1. 程式人生 > >QML和JS引擎的關系以及調用c++函數的原理

QML和JS引擎的關系以及調用c++函數的原理

一個 機制 綁定 itl lan js引擎 所有 函數 www.

首先推薦幾篇博客

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++函數的原理