我可以導入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中的文件。只是我的光盤中的本地文件。 –