QML中导入JavaScript文件

前言

JavaScript文件可以由QML文件和其他JavaScript文件导入。可以通过相对或绝对URL导入JavaScript文件。JavaScript资源也可以导入QML模块和其他JavaScript文件。

QML文件中导入JavaScript文件

语法格式: import  "ResourceURL"  as  Qualifier ,如下,

//导入
import "jsfile.js" as Logic

//使用变量和函数
console.log( Logic.str );
Logic.method();

导入的JavaScript资源始终使用“as”关键字进行限定。JavaScript资源的限定符必须以大写字母开头,并且必须是唯一的,因此限定符和JavaScript文件之间始终存在一对一的映射。(这也意味着限定符的名称不能与内置的JavaScript对象相同,如Date和Math)。

JavaScript文件中导入别的文件

文档说,在QtQuick2.0中,添加了标准QML导入语法的变体来导入其他JavaScript资源以及QML类型命名空间。

由于JavaScript资源能够以这种方式导入另一个脚本或QML模块,因此QtQuick2.0定义了一些额外的语义:

  • 带导入的脚本不会从导入它的QML文档继承导入(如访问Component.errorString会失败)
  • 没有导入的脚本将从导入它的QML文档继承导入(如访问Component.errorString会成功)
  • 共享脚本(即定义为.pragma library)不会从任何QML文档继承导入,即使它不导入其他脚本或模块

导入js语法格式: .import "filename.js" as Qualifier  (前面有个点),可以看到用法同QML导入JavaScript差不多,

//导入
.import "factorial.js" as MathFunctions

//使用变量和函数
console.log( MathFunctions.str );
MathFunctions.method();

导入qml语法格式: .import TypeNamespace MajorVersion.MinorVersion as Qualifier (前面有个点),如下 ,

.import Qt.test 1.0 as JsQtTest

JavaScript文件中包含别的Javascript文件

导入JavaScript文件时,必须使用限定符导入该文件。有时需要在导入上下文中使用这些函数而不需要对它们进行限定,并且在这种情况下,Qt.include() 函数可以用于包含来自另一个的一个JavaScript文件。这会将其他文件中的所有函数复制到当前文件的命名空间中,但会忽略该文件中定义的所有编译指示和导入。

文档的示例如下:

  import QtQuick 2.0
  import "script.js" as MyScript

  Item {
      width: 100; height: 100

      MouseArea {
          anchors.fill: parent
          onClicked: {
              //可以调用import的js的函数
              MyScript.showCalculations(10)
              //可以调用import的include的js的函数
              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)); //没有使用限定符就是用的另一个js文件的函数
  }
  // factorial.js
  function factorial(a) {
      a = parseInt(a);
      if (a <= 0)
          return 1;
      else
          return a * factorial(a - 1);
  }

参考

文档:Qt/Qt5.9.7/Docs/Qt-5.9.7/qtqml/qtqml-javascript-imports.html

QML可以通过Qt Quick XML模块来完成XML文件导入、导出和修改。下面是一个简单的示例代码,演示了如何在QML使用Qt Quick XML模块操作XML文件。 首先,在QML文件的头部添加以下代码,导入Qt Quick XML模块: ``` import QtQuick.XmlListModel 2.0 ``` 然后,使用XmlListModel组件来加载XML文件,并将其显示在ListView: ``` XmlListModel { id: xmlModel source: "file.xml" query: "/root/item" XmlRole { name: "title"; query: "title/string()" } XmlRole { name: "description"; query: "description/string()" } } ListView { model: xmlModel delegate: Text { text: title } } ``` 在以上代码,XmlListModel组件通过source属性指定要加载的XML文件,query属性指定要查询的节点路径,XmlRole定义了节点要显示的数据项。 接下来,可以在QML使用JavaScript来修改XML文件。以下是一个示例代码,演示了如何添加一个新的节点: ``` XmlListModel { id: xmlModel source: "file.xml" query: "/root/item" XmlRole { name: "title"; query: "title/string()" } XmlRole { name: "description"; query: "description/string()" } } function addItem(title, description) { var newElement = xmlModel.createObject({"title": title, "description": description}) xmlModel.append(newElement) xmlModel.save() } Button { text: "Add Item" onClicked: addItem("New Item", "New Description") } ``` 在以上代码,addItem函数使用createObject方法创建一个新的XML节点,并将其添加到XmlListModel。最后,调用save方法将修改保存到XML文件。 以上就是在QML导入、导出和修改XML文件的基本方法。需要注意的是,Qt Quick XML模块的使用需要在Qt项目添加xml模块的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龚建波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值