我可以导入JavaScript文件这已经是项目树这样的一部分:QML - 导入外部JavaScript文件
import "myFile.js" as MyFile
有没有办法为那些尚未包含在外部文件中做到这一点我的项目,即通过传递绝对或相对路径到我的光盘上的文件?
我可以导入JavaScript文件这已经是项目树这样的一部分:QML - 导入外部JavaScript文件
import "myFile.js" as MyFile
有没有办法为那些尚未包含在外部文件中做到这一点我的项目,即通过传递绝对或相对路径到我的光盘上的文件?
对于一些问题,去这样的:
是否有可能做这样的事情[这...]
通常最简单的方法,就是要尝试一下。
在你的问题中很重要的细节丢失:
是有问题的QML文件中
qrc
-file与否?
如果是,那么您需要告诉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
-files在一个proxyScript
。然而,您导入的脚本的功能将位于同一名称空间中。
当然,你也可以有更多的静态代理脚本,如果你想:
// staticProxyScript.js
Qt.include('file:/My/Absolute/Path/To/A/Script/That/I/Want/To/Use.js')
感谢您的回答。 QML文件在qrc中,是的。使用“file:///”的绝对路径有效,但我希望得到一个相对路径。我尝试将绝对应用程序路径存储在变量中,并将其用作基文件夹,但我无法在导入语句中使用该变量。对我来说似乎很奇怪,您可以从互联网上导入远程文件,但不是使用相对于应用程序的路径导入本地文件。 –
什么是你“项目树的一部分”?当然,它需要在你的项目所能达到的地方。但是你可以随意定义你的项目树,不是吗? – derM
对不起,不清楚。我的意思是我想导入一个我没有在Qt中创建并且不在我的qrc中的文件。只是我的光盘中的本地文件。 –