问题标签 [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 - Qt QJSEngine 导入js文件
是否可以在 QJSEngine (QT 5.6) 中导入 javascript 文件?
示例 1:
纯文本编辑中的文本:
C++:
jsimport.js 文件中的文本:
结果:
示例 2:
纯文本编辑中的文本:
相同的 C++ 代码
结果:
由于最后一个错误,似乎有一些导入功能。
c++ - 从 QScriptEngine 迁移到 QJSEngine
我正在将 QScriptEngine 代码迁移到 QJSEngine。我现在有:
所以,用户可以把 PrintLog("what ever"); 例如,在我的应用程序中, QLineEdit 和函数 pars::PrintMainLog 将进行评估。
QJSEngine有什么方法可以做到这一点吗?那么,用户是否放置了相同的 PrintLog("what ever");?我找到的唯一方法是在这里,所以用户应该输入类似 Logger.PrintLog("what ever"); 其中 Logger 是从 QObject 继承的具有 PrintLog 插槽的类。
c++ - 使用 QJSEngine 从 JavaScript 访问 Qt API
我正在使用 aQJSEngine
使应用程序可编写脚本。我希望 JavaScript 端能够修改用户界面。我现在的主要问题是从 JavaScript 访问 Qt API。
为了创建小部件,我添加了一个createWidget()
包装器,它使用QUILoader
:
我还注册了来自 的所有枚举qt_getQtMetaObject()
,这似乎处理了来自 的所有命名空间级枚举qnamespace.h
。不过,它看起来不像是公共 API 的一部分。
我真的应该手动处理这些东西还是我错过了什么?是不是有一个registerAllTheThings()
函数可以创建一个全局Qt
对象,通过它可以使用 Qt API?
如果没有,那我就有问题了。我可以QWidget
用 a 创建 s QUILoader
,但我找不到创建其他对象的方法,例如 a QStandardItemModel
。我认为所有 Qt 类都已经通过 注册qRegisterMetaType()
,但它们不是:QMetaType::type("QStandardItemModel")
通过返回失败UnknownType
。同样,我是否缺少一些注册所有内容的初始化函数调用?
javascript - 使用 QJSEngine 在 Qt 中执行 Javascript 的速度
背景: 我在一个需要以下内容的项目中工作:用户可以编写命令来使用主程序的内部变量(用 Qt/C++ 编写的 GUI)执行一些数学运算。
我的方法是一个文本框,用户可以在其中用 JavaScript 编写命令/脚本,然后 Qt 评估该代码。为此,我正在使用QJSEngine
问题:JavaScript 的计算速度很差/很慢。
例如,我们只有一个带有两个文本框(QTextEdit)和一个按钮的 GUI。在一个文本框中,用户编写 JavaScript 代码,当按下按钮时,它被评估,结果出现在另一个文本框中。
作为性能不佳的一个例子,当用户编写这个微不足道的 JavaScript 代码时,计算机会花费大约 3 秒来显示答案:
另一方面,如果在 Qt/C++ 中执行相同的操作,它是“瞬时的”:
我知道 JavaScript 是一种解释型语言,但这种表现正常吗?
这里有一个小的 Qt 示例程序 (pr_Parser) 来显示这个问题。我已经在 Qt Creator 4.0.1 中对此进行了测试。使用 Qt 5.7 MSVC2013 64 位。
谢谢你。
pr_parser.pro
主文件
CMainWindow.h
CMainWindow.cpp
javascript - 如何创建 Error 类型的 QJSValue 对象 - 从 QJSEngine 抛出错误
在 Qt 中,有谁知道如何创建 Error 类型的QJSValue?
上下文:我使用QJSEngine::evaluate()执行用户在使用 QT 创建的 GUI 中编写的 JavaScript 代码。该 JavaScript 代码调用 C++ 函数。根据文档,QJSEngine::evaluate() 仅在 JavaScript 代码中有错误时才会引发脚本异常(错误类型的 QJSValue)。因此,如果 C++ 函数中有错误,我的方法是返回类型错误的 QJSValue。我遵循这条路径,因为 QJSEngine::evaluate 没有捕获 C++ 异常。
这是预期功能的代码片段:
myCppClass::foo() 的迷你示例
太感谢了。
c++ - 从 QtScript 过渡到 QML/QJSEngine
有一些平台使用 QtScript 作为 JavaScript 解释器来描述应用程序的逻辑。
JS上的脚本示例
文件对象被描述为
而这样的对象超过10个,它被描述在一个平台上,很多逻辑都放在它们的构造函数/析构函数中,还有在JS代码中调用的Q_INVOKABLE方法。
问题:是否可以将所有这些转移到保存了 JS 代码语法的 QJSEngine(它已经写了很多)?
寻找对stackoverflow的响应
建议通过工厂来做,但它会大大降低 JS 代码的可读性,应该重写
javascript - 如何使用 QJSEngine 在 js 脚本中访问 QObject 的子对象?
从官方 qt doc中,它说:
信号和槽、对象的属性和子对象可用作创建的 QJSValue 的属性。
所以我希望访问 QObject 的孩子,但我没有找到正确的方法。
我有如下代码:
调试输出如下所示,但我在此输出中找不到子标签信息(例如文本“Hello World”)。所以,我的问题是如何在 js 脚本中访问 QLabel (objectName: "myLabel")?
javascript - 将 QJsonObject 转换为 Javascript 对象
作为 qt 文档QJSValue
,QJsonObject
不能隐式转换为QJSValue
,我想QJSEngine
从 C++ 调用一个 javascript 函数,应将参数传递QList<QJsValue>
给调用另一个QJSValue
包含函数本身的函数。
问题是我的一个论点是QJsonObject
,直到现在我应该将其转换为文本,然后调用并将其传递给调用它以JSON.parse
将其转换为对象的 javascript 函数,我正在寻找一种可以让我转换QJsonObject
为QJSValue
C++的解决方案并使用对象参数而不是 json 文本调用 javascript 函数。
目前代码如下所示
我想要一个像这样的功能QJSValue ConvertToQJSValue(QJsonObject object)
:
javascript - 我可以更改 javascript: hasFocus() 的文档方法以始终返回“true”吗?
我试图愚弄这个特定的代码:
因此,即使我不是 Chrome 中的前台应用程序,它也会返回 True。我想到的解决方案:
以某种方式使用硒?
在 chrome JS 引擎或 chromium 中编译新的 hasFocus() 方法?总是返回 True。
c++ - QJSEngine 在访问指向 C++ 对象的指针时导致退出时崩溃
我正在尝试使我的应用程序的一部分可编写脚本。我有一个对象“GraphLogic”,其中包含一个关于“块”对象的指针表。我想在我的脚本中访问这个对象。
实现(graphlogic.cpp):
我也使Block::GetLabel()方法可编写脚本。这是块类block.h:
和block.cpp:
我可以使我的“GraphLogic”对象可用于脚本,它工作正常。当我尝试访问块对象时,我可以获得块标签,脚本到最后并正常退出。
Macro.qs(作为参数传递给GraphLogic::export):
但是当我再次尝试访问Block对象时,它会崩溃。这是示例main.cpp:
}
可能是因为它们已经被 QJSEngine 销毁了?我说这是因为当我忘记明确声明GraphLogic对象的所有权为QQmlEngine::CppOwnership时,发生了同样的问题。
所以,我想我必须找到一种方法来防止 QJSEngine 破坏Block对象。与QQmlEngine::setObjectOwnership相同,但在 javascript 中,因为我无法访问脚本之外的当前块。关于如何实现这一目标的任何想法?谢谢,