问题标签 [qtscript]

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.

0 投票
0 回答
54 浏览

qt - ReferenceError:找不到变量:QTimer - 为什么我的脚本无法使用 Qtimer?

我尝试了在 SO 其他地方建议的这个片段:

结果:

我需要设置什么才能让计时器工作吗?

0 投票
1 回答
517 浏览

python - QTScript 和 Python 之间的套接字通信

我正在尝试将外部 python 脚本与允许 qt-scripting 的 C++ 程序进行通信。其目标是从 python 代码部分控制 C++ 程序(使用其 qtscript api 函数)。

我知道如何在 python 中创建一个基本的套接字服务器/客户端:

...

但是我在 qtscript 中找不到太多关于如何做到这一点的信息(没有 javascript 经验),我知道有QTcpSocket Class,但我不确定从哪里开始获得像我拥有的​​ python 的片段。有这个问题,但它对我的问题没有用。有这个样本,但我不能让它工作。

Python 中的客户端或服务器哪个更好?我可以找到一个 qtscript 示例吗?

0 投票
0 回答
55 浏览

javascript - QTScript 中的类型化数组

我有一个 javascript 库,可以从/向文件读取和写入二进制格式的 C++ 样式数据。为此,我使用类型化数组(float32array、arraybuffer ...)。

我需要将此库移植到 QtScript。QTScript 应该符合定义类型数组的 ECMA-262,但我无法让它工作。

有人试过吗?

0 投票
2 回答
1816 浏览

visual-studio - 使用 MS Visual Studio 编译器时如何在项目中启用 QtScript?

使用 QMake,QtScript 的设置就像将其添加到您的.pro文件一样简单:

但我们在项目中使用 MS Visual Studio。为了使 Visual Studio 识别 QtScript 包含的内容,我应该做些什么更改?目前,它报告未找到文件:

致命错误 C1083:无法打开包含文件:“ QScriptValue”:没有这样的文件或目录

我使用 Visual Studio 的 Qt 插件。我已经检查了那里的脚本选项 - 实际上它已经检查过了- 但这并没有解决问题:

图片说明

0 投票
0 回答
982 浏览

qt - 调试 QJSEngine?

我有一个为(长期运行的)用户脚本提供 JS API 的项目。这个项目仍然使用 QtScript 模块,这有点让我烦恼,因为该模块被标记为已弃用一段时间。

我的问题是我需要用户能够调试他们的 JS 代码,这正是 QtScript 尤其是 QScriptEngineDebugger 非常方便的地方。

现在我刚刚阅读了“Qt 5.7 中的新增功能”帮助页面上的这两行。

启用所有调试服务以使用 QJSEngine(而不是 QQmlEngine),这允许非 QML JavaScript 调试或分析。
增加了对同时调试多个 QJSEngine 实例的支持。

显然,这引起了我的注意,但是通过其余的帮助搜索,我找不到任何关于调试 QJSEngine 的信息。

谁能告诉我如何用 QJSEngine 实现类似于 QtScript 和 QScriptEngineDebugger 的东西?

0 投票
0 回答
509 浏览

c++ - 从 QScriptEngine 迁移到 QJSEngine

我正在将 QScriptEngine 代码迁移到 QJSEngine。我现在有:

所以,用户可以把 PrintLog("what ever"); 例如,在我的应用程序中, QLineEdit 和函数 pars::PrintMainLog 将进行评估。

QJSEngine有什么方法可以做到这一点吗?那么,用户是否放置了相同的 PrintLog("what ever");?我找到的唯一方法是在这里,所以用户应该输入类似 Logger.PrintLog("what ever"); 其中 Logger 是从 QObject 继承的具有 PrintLog 插槽的类。

0 投票
1 回答
117 浏览

c++ - 在评估之前设置 QScriptValue-local 值

在 Qt 4.8 中,从 C++ 端是否可以QScriptValue在 a 中设置 -local 值QScriptEngine

例如,假设我有:

我希望它的输出是:

上面人为示例的明显解决方案是只使“loc”全局并相应地设置+重置它,但出于分散这个问题的原因,这不是我想要的。我想要:

  • “loc”对每个人来说都是本地的QScriptValue
  • 不要人为地修改脚本字符串,例如在脚本前添加QString().sprintf("loc = %d;", 42)或其他任何内容。
  • 只使用一个QScriptEngine.

我唯一能真正想到尝试的是:

但似乎该值已经被完全评估evaluate(),因此setProperty()没有效果(这并不奇怪)。

我还QScriptProgram希望它能提供一个程序本地环境,但唉。

正在查看文档,并将在发布此内容后继续查看它们,但这是我第一次使用QScriptEngine,我不得不承认我的大脑正在变成糊状,所以如果它就在那儿,我很抱歉并且完全明显的。我将接受 RTFM 作为有效答案。

0 投票
1 回答
411 浏览

c++ - 有没有办法在 QScriptEngine#pushContext/popContext 之外维护 Qt 脚本上下文环境?

在 Qt 4.8 的脚本引擎中,“局部”变量可以通过获取 aQScriptContext来设置,QScriptEngine::pushContext然后设置其激活对象的属性。这只能在 push/pop 调用中完成,因为这是 a 唯一QScriptContext可用的地方,而 AFAICT 没有等效的QScriptEngine#evaluateaQScriptContext用作环境:

是否有某种方法可以维护一个环境以用于推送/弹出调用之外的评估?例如,我尝试创建一个QScriptValue用作激活对象,然后设置它:

但这不起作用。它输出nan而不是1,value未定义。由于某种原因setActivationObject没有改变价值。

我的总体目标是:

  1. 在评估代码之外设置本地环境。
  2. pushContext然后在评估和调用之间的脚本时使用预先配置的本地环境popContext,而不必每次都重新设置该环境中的所有变量。

所以:

  • 有没有办法做到这一点?
  • 是否有可能我在正确的轨道上但我设置不ao正确?例如,有一个未记录的文件QScriptEngine#newActivationObject()在使用时会产生“未实现”错误,也许这是一个提示?

如何设置本地上下文但基本上不必在每次推送上下文时重新配置它(因为每次弹出上下文时它基本上都会丢失)。

0 投票
0 回答
728 浏览

c++ - 从 QtScript 过渡到 QML/QJSEngine

有一些平台使用 QtScript 作为 JavaScript 解释器来描述应用程序的逻辑。

JS上的脚本示例

文件对象被描述为

而这样的对象超过10个,它被描述在一个平台上,很多逻辑都放在它们的构造函数/析构函数中,还有在JS代码中调用的Q_INVOKABLE方法。

问题:是否可以将所有这些转移到保存了 JS 代码语法的 QJSEngine(它已经写了很多)?

寻找对stackoverflow的响应

QJSEngine中的动态c++对象

建议通过工厂来做,但它会大大降低 JS 代码的可读性,应该重写

0 投票
1 回答
261 浏览

c++ - 如何将 QVariant 转换为原生 QtScriptValue(数字、字符串等)

我在验证 QtScript 脚本中的值时遇到了一些问题。验证器函数如下所示:

该字符串"X"在我的设置中也是无效值。这些值被添加到一些对象,如下所示:

现在问题是转换"undefined"为字符串的值不断通过typeof检查。所以我添加了测试调试输出。someQtscriptValue我在脚本中打印了整个内容:

结果令人困惑(缩短了,看起来都一样):

我还决定打印有关每个值的一些信息:

而这更令人惊讶:

显然,如果我从中做QScriptValue出来的QVariant行为就像一个对象,因为包括“未定义”在内的所有值都具有对象类型。

那么从 QVariants 创建 QScript 值的正确方法是什么?