QML - 导入外部JavaScript文件

时间:2017-08-03 12:29:34

标签: javascript import qml external

我可以导入已经属于项目树的JavaScript文件,如下所示:

import "myFile.js" as MyFile

有没有办法对我项目中尚未包含的外部文件执行此操作,即通过将绝对路径或相对路径传递到光盘上的文件?

1 个答案:

答案 0 :(得分:2)

对于一些类似的问题:

  

是否可以做[this ...]

之类的事情

通常最简单的方法就是尝试一下。

在您的问题中,缺少一个重要细节:

  

QML文件是否在qrc - 文件中?

如果是,那么你需要告诉QML它应该在qrc之外。与图片一样,您可以使用file:///作为前缀。

绝对路径在这里工作正常。亲戚很棘手,因为你需要预测你来自哪个目录。我不能告诉你。

如果QML不在qrc中,那么在任何情况下都会在文件系统上指定相对路径,因此这里没有问题。您甚至不需要添加file:///

如果你想让它更轻松,请从互联网上试试:

import QtQuick 2.5
import QtQuick.Controls 2.0
import 'http://code.qt.io/cgit/qt/qtdeclarative.git/plain/examples/quick/demos/photoviewer/PhotoViewerCore/script/script.js' as Test

ApplicationWindow {
    id: window
    visible: true
    width: 600
    height: 600

    Button {
        text: 'Calculate Scale of an Image: 100x100px for a target size of 200px'
        onClicked: console.log('It is:', Test.calculateScale(100, 100, 200) + '!\nMagical!')
    }
}

对于更动态的导入,您可以创建一个不超过此内容的代理脚本:

// proxyScript.js

function include(path) { Qt.include(path) }

然后您可以在QML文件中使用它:

import QtQuick 2.0
import QtQuick.Controls 2.0
import 'proxyScript.js' as Script1
import 'proxyScript.js' as Script2

ApplicationWindow {
    Component.onCompleted {
        // Load scripts here
        var path1 = [...] // Build the absolute path of some script to load
        var path2 = [...] // Build the absolute path of another script to load
        Script1.include(path1) // Now you can access the content of the script at path1 via `Script1.functionFromPath1...`
        Script2.include(path2)
    }
    [...]
}

您还可以在一个.js中导入多个proxyScript个文件。但是,导入的脚本的功能将位于相同的名称空间中。

当然,如果需要,您还可以拥有更多静态代理脚本:

// staticProxyScript.js

Qt.include('file:/My/Absolute/Path/To/A/Script/That/I/Want/To/Use.js')