2016-06-27 9 views
2

Ist es möglich, Javascript-Dateien in einer QJSEngine (QT 5.6) zu importieren?Qt QJSEngine Import js Dateien

Beispiel 1:

Text in plainTextEdit:

.import "./jsimport.js" as Test 
var x = Test.y; 
console.log(x); 

C++:

void MainWindow::on_pushButton_clicked() 
{ 
    QJSEngine engine; 
    engine.installExtensions(QJSEngine::AllExtensions); 

    QJSValue result = engine.evaluate(ui->plainTextEdit->toPlainText()); 
    qDebug() << "isError:" << result.isError(); 
    qDebug() << "resultString:" << result.toString(); 
    if(result.hasProperty("lineNumber")) 
     qDebug() << "property lineNumber:" << result.property("lineNumber").toInt(); 
} 

Text in jsimport.js Datei:

var y = 42; 

Ergebnis:

isError: true 
resultString: "ReferenceError: Test is not defined" 
property lineNumber: 2 

Beispiel 2:

Text in PlainTextEdit:

.import "./jsimport.js" 

gleichen C++ Code

Ergebnis:

isError: true 
resultString: "SyntaxError: File import requires a qualifier" 
property lineNumber: 1 

Es scheint, dass es wegen des letzten Fehlers einige Funktionen für einen Import gibt.

Antwort

0

Die Anweisung .import funktioniert nicht mit QJSEngine. QJSEngine ist nur ein nacktes Interpreter, wenn Sie einige „Import“ -Funktion haben möchten Sie QQmlEngine wechseln könnte, die oben auf QJSEngine gebaut: http://doc.qt.io/qt-5/qtqml-syntax-imports.html#qml-import-path

Mit QJSEngine Sie im Grunde brauchen, um manuell die js globale Objekt bevöl (und QtCreator sintax checker erkennt die Anweisungen nicht, die Sie in den verschiedenen Dateien verwenden).

+0

oh ok. Kann ich die QQmlEngine nur für Javascript verwenden? – Mike

+0

Ich weiß es nicht, noch kann ich Sie auf ein Beispiel davon hinweisen. In meinem Projekt habe ich QJSEngine verwendet und es funktioniert gut, solange Sie nicht erwarten, dass es Qml-Funktionen hat. –