导入 JavaScript 时如何在 QML 中使用绝对路径?

Posted

技术标签:

【中文标题】导入 JavaScript 时如何在 QML 中使用绝对路径?【英文标题】:How to use absolute paths in QML when importing JavaScript? 【发布时间】:2015-10-08 08:57:44 【问题描述】:

我无法确定 QML 如何让您在导入 Components 和 javascript 文件时使用绝对路径。

据我所知,导入的唯一方法是使用相对路径或将Components 作为模块导入。

但由于我不能将 JavaScript 函数作为模块(或者我可以吗?),我只能做相对路径。

所以我的大多数组件中的标题都填充了这样的代码:

import QtQuick 2.5
import QtQuick.Layouts 1.2
import MyCompany.Gui 1.0

import "markets"
import "../../../../../../javascript/markets/MarketHelper.js" as MarketHelper

我怎样才能让 JavaScript 像 QML 模块一样被导入?

【问题讨论】:

【参考方案1】:

您可以使用以下format 将JavaScript 文件定义为qmldir 文件的一部分:

<ResourceIdentifier> <InitialVersion> <File>

声明一个可供模块使用的 JavaScript 文件。资源将通过具有指定版本号的指定标识符提供。

qmldir 文件中可能存在零个或多个 JavaScript 资源声明,但是每个 JavaScript 资源在模块的任何特定版本中都必须具有唯一标识符。 示例:

MyScript 1.0 MyScript.js

所以,如果您已经有一个现有的qmldir,您可以在其中添加以下行:

MarketHelper 1.0 MarketHelper.js

然后,你可以这样使用它:

import Market 1.0

// ...    

    Text 
        text: MarketHelper.priceOfOil()
    

// ...

Qt Quick Controls does this for calendar-related functionality,例如CalendarUtils.js

更多信息:

http://doc.qt.io/qt-5/qtqml-javascript-resources.html http://doc.qt.io/qt-5/qtqml-modules-topic.html http://doc.qt.io/qt-5/qtqml-modules-identifiedmodules.html#locally-installed-identified-modules

【讨论】:

嗨,米奇。我想我希望避免为 just JavaScript 函数使用模块。我认为将 JavaScript 放在一个与实际 qml 项目完全不同的文件夹结构中并不是很好的设计。但我最终做到了。所以谢谢你。 只是把我的两分钱投入:我认为这很好。将来您可能会发现自己在其中添加其他代码。 :) 无论如何,它肯定比使用绝对路径要好(我不确定这是否可能,这就是为什么我没有在回答中解决它)。

以上是关于导入 JavaScript 时如何在 QML 中使用绝对路径?的主要内容,如果未能解决你的问题,请参考以下文章

QML:在派生类中使属性只读

如何在 QML 中编写条件导入语句?

如何在Javascript中使按钮居中

如何在javascript中使作为数组元素的对象为空[重复]

尝试将外部 QML 模块导入我的项目时出错

如何在 Javascript 中使简单的 php 的 foreach 等效? [复制]