问题标签 [qjsengine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 自定义 C++ 类型到 QJSEngine:成员函数返回值始终是 QVariant
我有一组基于 QJSEngine 的 Qt 5 中暴露给 javascript 的 C++ 类(因为 Qt 脚本似乎已被弃用)。
我的 QObject 派生类 A 和 B 有 Q_OBJECT 宏并且也使用 Q_DECLARE_METATYPE 宏。
我已经为我的类公开了工厂函数,这些函数允许我从 javascript 内部创建新实例。以下所有工作正常:
有没有办法让我确保 javascript 中的 GetParent 被识别为实际的 A 类对象,而不是 QVariant?
javascript - 如何使用 QJSEngine 构建 API?
我从 Qt 开始,我的一个项目是使用 QJSEngine 来评估 javascript,我想为脚本提供一个完整的 API,包括类和全局函数。
现在我的程序只提供 ECMAScript 默认的东西(eval、encodeURI、parseInt 等),但我需要向代码公开一些自定义类,比如浏览器 API(WebSocket 类、Image 类、文档对象)。例如:
我需要在 C++ 中定义类的行为,它无助于评估类定义并让用户代码运行。
c++ - 访问 QJSEngine 中的动态属性
我可以访问QObject
传递给 a 的 s 的属性QJSEngine
,但为什么我不能访问动态属性?
回报:
使用 Qt 5.2。
c++ - QJSEngine 删除我的 QObject,如何在 QJSEngine::newQObject 之后更改所有权?
尝试使用子类 QObject 作为参数执行小脚本。
在销毁 jsEngine 时,它为我的子对象调用 delete(因为 newQObject 使用 JavaScriptOwnership 创建它)。如何避免它,如何更改 arg 的所有权?
脚本很简单:
UPD:
可以调用QQmlEngine::setObjectOwnership(child, QQmlEngine::CppOwnership);
对象,因为它是静态函数。只是从帮助中不清楚。认为它也应该在QJSEngine
。
c++ - QtScript 与 QJSEngine 何时使用一个或另一个?
我必须在 C++ 应用程序中运行一系列 javascript“脚本”。其中大部分是重复动作。这里的代码示例。
我知道 Qt,因为版本 5 包含 2 个 javascript 引擎:QtScript 和 QJSEngine。
我的问题是我们应该在哪些情况下使用一种或另一种?哪个表现更好,在哪些情况下?
qt5 - 如何使用 QJSEngine 实例化 c++ 对象
是否可以向 QJSEngine(QML 引擎)声明一个 C++ 类,以便可以从 javascript 实例化该类的对象?
到目前为止,我能想到的唯一解决方案是使用 Q_INVOKABLE 创建一个工厂方法,该方法使用 QJSEngine ::newQObject() 返回一个对象
谢谢!
c++ - QJSEngine 与 QtScript 和 QList
由于Qt
5.5 是实际的,QtScript
因此已弃用。替换是Qt
QML 和QJSEngine
. 现在,我将我的项目重写为新引擎。我有一些课程,例如:
并通过QtScript
以下方式注册:
在新的 QJSEngine 中,我使用 qmlRegisterUncreatableType 注册节点。但是,我找不到注册 QList 的方法。
知道任何人的正确方法吗?
javascript - QJSEngine 评估结果不包含函数
我正在QScriptEngine
将代码迁移到QJSEngine
,并且遇到了在评估脚本后无法调用函数的问题:
这个脚本的输出是:
当我使用时可以调用相同的函数QScriptEngine
:
为什么函数不作为评估结果的属性存在,我该如何调用它?
qt - QJSEngine:打印到控制台
我正在从QScriptEngine
(已弃用)移动到QJSEngine
,我发现我无法使用print
:
输出是:
在QScriptEngine
它工作。
那么,打印一些东西到控制台的方法是什么QJSEngine
?在文档中找不到任何内容。我尝试使用console.log
,但console
也没有定义。
c++ - QJSEngine checkForSyntax 函数
在 LiScriptEngine 我们有以下功能:-
QScriptSyntaxCheckResult QScriptEngine::checkSyntax(const QString & program)
这对于识别引擎执行程序时发生的错误类型更有用。目前我正在从 ScriptEngine 迁移到 JSEngine。但是在 JSEngine 中我找不到真正的等价物,JSEngine 中的 exvaluate() 返回 JSValue 没有真正的错误对象。在浏览 JSValue 的文档时,我可以看到诸如 isError() 之类的函数以及诸如 line、stack、name 之类的错误属性...但是这些都不等同于 checkForSyntax。关于这个问题的任何想法或者这不是可能在 JSEngine 中。