Linuxkiss
    首页 Linux C/C++ C++面试 Qt答疑 Qml中文手册 Qt CMake Python 工具
Linuxkiss
www.linuxkiss.com 你可以精通一门IT技术
  1. 首页
  2. Qml中文手册
  3. 正文

QML共享的JavaScript资源(库)Shared JavaScript Resources (Libraries)

2020年08月21日 12点热度 0人点赞

QML共享的JavaScript资源(库)

默认情况下,从QML导入的JavaScript文件与QML组件共享它们的上下文。这意味着JavaScript文件可以访问相同的QML对象,并且可以对其进行修改。因此,每个导入都必须具有这些文件的唯一副本。

上一节介绍了JavaScript文件的有状态导入。但是,某些JavaScript文件是无状态的,并且在某种意义上更像可重用的库,因为它们提供了一组帮助程序函数,这些函数不需要从其导入位置中获取任何内容。如果使用特殊的实用标记来标记此类库,则可以节省大量内存并加快QML组件的实例化,如以下示例所示。

// factorial.js
.pragma library

var factorialCount = 0;

function factorial(a) {
    a = parseInt(a);

    // factorial recursion
    if (a > 0)
        return a * factorial(a - 1);

    // shared state
    factorialCount += 1;

    // recursion base-case.
    return 1;
}

function factorialCallCount() {
    return factorialCount;
}

编译指示必须出现在任何JavaScript代码(注释除外)之前。

请注意,多个QML文档可以导入"factorial.js"并调用它提供的factorial和factorialCallCount函数。JavaScript导入的状态在导入它的QML文档之间共享,因此,在从未调用阶乘函数的QML文档中调用时,factorialCallCount函数的返回值可能为非零。

例如:

// Calculator.qml
import QtQuick 2.0
import "factorial.js" as FactorialCalculator // This JavaScript resource is only
                                             // ever loaded once by the engine,
                                             // even if multiple instances of
                                             // Calculator.qml are created.

Text {
    width: 500
    height: 100
    property int input: 17
    text: "The factorial of " + input + " is: " + FactorialCalculator.factorial(input)
}

尽管可以将QML值作为函数参数传递,但共享它们时,.pragma库文件无法直接访问QML组件实例对象或属性。

 

英文官方地址:https://doc.qt.io/qt-5/qtqml-javascript-resources.html#shared-javascript-resources-libraries

标签: qml中文手册 qml中文文档
最后更新:2020年08月21日

Leo

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >
关注公众号

日历
2021年4月
一 二 三 四 五 六 日
« 2月    
 1234
567891011
12131415161718
19202122232425
2627282930  
最新 热点 随机
最新 热点 随机
windows中出现"无法解析的外部符号"到底是什么原因 Qt5中lambda表达式用法,非常实用 warning: class 'InterFace' defines a non-default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator 无法解析的外部符号 "public: static struct QMetaObject const Windows下Qt代码出现的错误总结 QT Creator如何在创建项目的时候,头文件和cpp文件的首字母默认大写
error: undefined reference to `vtable for ...'【已解决】 qmake中的替换函数member(variablename [, start [, end]]),num_add(arg1 [, arg2 ..., argn]) 6.5 脚本安装包 4.3.2 其他文件搜索命令 1locate 2which 3whereis 4grep QML类型系统(The QML Type System) conda-多环境配置【详细】
标签聚合
Linux qmake C++ Qt openCv C/C++面试 qml中文文档 qml中文手册

COPYRIGHT © 2015-2021 Linuxkiss. ALL RIGHTS RESERVED.

苏ICP备12059464号-2