Qt QJSEngine 导入js文件

Posted

技术标签:

【中文标题】Qt QJSEngine 导入js文件【英文标题】:Qt QJSEngine import js files 【发布时间】:2016-06-27 14:55:36 【问题描述】:

是否可以在 QJSEngine (QT 5.6) 中导入 javascript 文件?

示例 1:

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();

jsimport.js 文件中的文本:

var y = 42;

结果:

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

示例 2:

PlainTextEdit 中的文本:

.import "./jsimport.js"

相同的 c++ 代码

结果:

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

由于上一个错误,似乎有一些导入功能。

【问题讨论】:

【参考方案1】:

.import 语句不适用于 QJSEngine。 QJSEngine 只是一个简单的解释器,如果你想拥有一些“导入”功能,你可以切换到 QQmlEngine,它是建立在 QJSEngine 之上的: http://doc.qt.io/qt-5/qtqml-syntax-imports.html#qml-import-path

使用 QJSEngine,您基本上需要手动填充 js 全局对象(并且 QtCreator sintax 检查器不会识别您在不同文件中使用的语句)。

【讨论】:

哦,好的。我可以将 QQmlEngine 仅用于 javascript 吗? 我不知道,也不能给你举一些例子。在我的项目中,我最终使用了 QJSEngine,只要您不期望它具有 Qml 功能,它就可以正常工作。

以上是关于Qt QJSEngine 导入js文件的主要内容,如果未能解决你的问题,请参考以下文章

QJSEngine - 暴露类和抛出错误

如何清理或销毁 QJSEngine?

QJSEngine 不会正确评估 js 数组

C++ QT 在 QJSEngine 中调用 C++ 函数

使用 Qt.include(...) 导入 js 文件时缺少 QtCreator 智能感知

单个应用程序中有多个 QJSEngine 实例?