qml 引入js_GrayCatYa

本文详细介绍了如何在QML文档中导入和使用JavaScript资源,包括相对和绝对路径的引用,JavaScript资源间的导入,以及使用Qt.include()函数包含JavaScript文件的方法。通过示例展示了如何在QML组件中调用JavaScript函数,并解释了导入语句的语义限制。
摘要由CSDN通过智能技术生成

JavaScript资源可以被QML文档和其他JavaScript资源导入,可以通过相对或者绝对路径进行导入。如果使用相对路径,则位置解析需要相对于包含import语句的QML文档或JavaScript资源的位置。如果JavaScript需要从网络资源中进行获取,则组件的status属性会被设置为“Loading”,直到该脚本被下载完成。

JavaScript资源也可以导入QML模块和其他的JavaScript资源。在JavaScript资源中的import语句的语法和QML文档中的import语句的语法略有不同,下面的内容中会详细讲解。可以在帮助中索引Importing JavaScript Resources in QML关键字查看本节内容。

在QML文档中导入JavaScript资源

在QML文档中可以使用如下语法来导入一个JavaScript资源:

import “ResourceURL” as Qualifier

例如:

import "jsfile.js" as Logic

导入JavaScript资源总是使用”as” 关键字进行限定的。每个JavaScript资源的限定符必须是唯一的,所以限定符和JavaScript文件总是一对一的映射。在被导入的JavaScript文件中定义的函数可以被QML文档中定义的对象调用,这需要使用Qualifier,functionName(params)语法。JavaScript资源中的函数可以包含参数,参数类型可以是QML基本类型或对象类型也可以使用常规的JavaScript类型。当在QML中调用这些函数时,数据类型转换规则(可以在帮助中索引Data Type Conversion Between QML and C++关键字)会应用到参数上并返回结果。

在JavaScript资源中进行导入

从Qt Quick 2.0 开始,JavaScript资源可以使用标准的QML导入语法来导入其他JavaScript资源和QML类型命名空间。不过还会受到下面这些额外的语义限制:

包含导入的脚本不会从导入了该脚本的QML文档中继承导入(如无法访问Component.errorString);

没有包含导入的脚本可以从导入了该脚本的QML文档中继承导入(如可以访问Component.errorString);

一个共享脚本(如定义为.prama库)不能从任何QML文档中继承导入。

第一个语义概念上是正确的,这样一个特定的脚本会被多个QML文件导入;第二个语义的保留是为了向后兼容;第三条语义于当前的共享脚本的语义是一致的,这里只是为了对可能出现的新情况(在脚本中导入其他脚本或模块)进行澄清。

JavaScript资源可以使用下面的方式来导入其他资源:

. import "filename.js" as Qualifier

例如:

. import "factorial.js" as MathFunctions

JavaScript资源可以使用下面的方式来导入一个QML模块:

. import TypeNamespace MajorVersion.MinorVersion as Qualifier

例如:

. import Qt.test 1.0 as JsQtTest

包含一个JavaScript资源

当导入一个JavaScript文件时,必须使用限定符,这样在这个JavaScript文件中的函数就可以被导入该文件的脚本通过限定符进行访问了。有时希望不使用限定符就可以导入这些函数并直接使用,这时可以使用Qt.include()函数来包含一个JavaScript文件。这样会复制被包含文件中所有的函数到当前文件的命名空间,但是会忽略所有的参数和定义在文件中的导入。例如下面的代码中的主文件里调用了script.js中的showCalculations(),而在script.js中调用了factorial.js中的factorial(),因为script.js中使用Qt.inculude() 包含了factorial.js文件。

//myjs.qml

import QtQuick 2.9

import "script.js" as MyScript

Item {

width: 100; height: 100

MouseArea {

anchors.fill: parent

onClicked: {

MyScript.showCalculations(10)

console.log("Call factorial() from QML:", MyScript.factorial(10))

}

}

}// script.js

Qt.include("factorial.js")

function showCalculations(value) {

console.log("Call factorial() from script.js:", factorial(value));

}// factorial.js

function factorial(a) {

a = parseInt(a);

if(a <= 0)

{

return 1;

} else {

return a * factorial(a - 1);

}

}

注意:调用Qt.include()会复制factorial.js中所有的函数到MyScript命名空间,这就意味着QML组件中也可以直接通过MyScript.factorial()来访问factorial()函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值