2017-08-03 2 views
0

I JavaScript-Dateien importieren, die bereits Teil des Projektbaums wie diese sind:QML - Import externe JavaScript-Datei

import "myFile.js" as MyFile 

Gibt es eine Möglichkeit, dies für externe Dateien zu tun, die nicht bereits enthalten sind meine Projekt, dh durch die Übergabe eines absoluten oder relativen Pfades an die Datei auf meiner Disc?

+0

Was Teil des Projektbaumes "für Sie? Natürlich muss es irgendwo in der Reichweite Ihres Projekts sein. Aber Sie können Ihren Projektbaum so definieren, wie Sie möchten, oder? – derM

+0

Entschuldigung wegen Unklarheit. Was ich meinte war, dass ich eine Datei importieren möchte, die ich nicht in Qt erstellt habe und die nicht in meinem Qrc liegt. Nur eine lokale Datei von meiner CD. –

Antwort

1

Für einige Fragen, die wie gehen:

Ist es möglich, so etwas wie [dies ...] zu tun

in der Regel der einfachste Weg ist, um es auszuprobieren.

In Ihrer Frage ein wichtiges Detail fehlt:

Ist die QML-Datei in Frage in einem qrc -file oder nicht?

Wenn dies der Fall ist, müssen Sie QML mitteilen, dass es sich außerhalb des QRC befinden soll. Wie bei Bildern, tun Sie das, indem Sie es mit file:/// voranstellen.

Ein absoluter Pfad funktioniert hier gut. Der Verwandte ist schwierig, da Sie voraussagen müssen, aus welchem ​​Verzeichnis Sie kommen. Das kann ich dir nicht sagen.

Wenn die QML nicht in einer qrc ist, dann werden Sie auf jeden Fall einen relativen Pfad im Dateisystem angeben, also keine Probleme hier. Sie brauchen nicht einmal die file:///

voranstellen Wenn Sie es ein litte entfernteren haben wollen, versuchen Sie es aus dem Internet:

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!') 
    } 
} 

Für eine dynamischere Import, ein Proxy-Skript erstellen mit nicht mehr als diesen Inhalt:

// proxyScript.js

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

Dann können Sie es in Ihrem QML-Datei als dies:

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) 
    } 
    [...] 
} 

Sie können auch mehrere .js -Dateien in einem proxyScript importieren. Die Funktionen der Skripte, die Sie importieren, befinden sich jedoch im selben Namensraum.

Natürlich können Sie auch mehr statischen Proxy-Skripte, wenn Sie wollen:

// staticProxyScript.js

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

Danke für Ihre Antwort. Die QML-Datei ist in einem qrc, ja.Die Verwendung eines absoluten Pfades mit "file: ///" funktioniert, aber ich möchte einen relativen Pfad verwenden. Ich habe versucht, den absoluten Anwendungspfad in einer Variablen zu speichern und als Basisordner zu verwenden, aber ich kann diese Variable nicht in der import-Anweisung verwenden. Mir scheint komisch, dass Sie Remote-Dateien aus dem Internet importieren können, aber kein lokales, das einen Pfad relativ zur Anwendung verwendet. –