2017-08-03 12 views
0

ファイル私はすでにこのようなプロジェクトツリーの一部であるのJavaScriptファイルをインポートすることができます。QML - インポート外部JavaScriptが

import "myFile.js" as MyFile 

をすでに私の中に含まれていない外部ファイルのためにこれを行うにはどのような方法がありますプロジェクト、すなわち絶対パスまたは相対パスをディスク上のファイルに渡すことによって、以下のように行くいくつかの質問については

+0

をあなたに「プロジェクトツリーの一部」とは何ですか?もちろん、あなたのプロジェクトのどこかにある必要があります。しかし、プロジェクトツリーを好きなように定義することはできますか? – derM

+0

不明な点をおかけして申し訳ございません。私が意図したのは、私がQt内で作成していないファイルをインポートしたいのですが、それは自分のqrcにありません。私のディスクのローカルファイルです。 –

答えて

1

はそれが可能[この...]

通常、最も簡単な方法のような何かを行うことです、それを試してみることです。

あなたの質問では、重要なディテールが欠落しています。

qrc -fileかで問題のQMLファイルですか?

そうであれば、それはqrcの外側にあることをQMLに伝える必要があります。写真の場合と同様に、プレフィックスとして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) 
    } 
    [...] 
} 

あなたは1 proxyScriptで複数の.js -filesをもインポートすることができます。ただし、インポートするスクリプトの機能は同じ名前空間になります。あなたがしたい場合はもちろん

あなたはまた、より多くの静的プロキシスクリプトを持つことができます。

// staticProxyScript.js

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

あなたの答えをありがとう。 QMLファイルはqrcにあります。"file:///"で絶対パスを使用すると動作しますが、相対パスを取得したいのですが。私は、絶対アプリケーションパスを変数に格納し、それをベースフォルダとして使用しようとしましたが、importステートメントでその変数を使用することはできません。あなたがインターネットからリモートファイルをインポートすることはできますが、アプリケーションに関連するパスを使用してローカルファイルをインポートすることはできません。 –

関連する問題