问题标签 [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 投票
2 回答
1646 浏览

c++ - 使用 QScriptEngine::newFunction 的成员函数

0 投票
2 回答
1192 浏览

c++ - 如何在 QtScript 中使用 c++ std 复数

我试图找出如何在 QtScripts 中使用复数,以便可以从 QtScript 调用使用复数参数定义的槽。用户也应该可以从脚本中访问复数的基本代数(+、-、exp、...)。

只是为了说明,我想打电话的是:

有任何想法吗?谢谢!

0 投票
1 回答
544 浏览

javascript - 是否可以在 QtScript 中使用带有重载运算符的自定义 C++ 类?

有谁知道是否有可能有一个带有重载运算符(如 +、-、*)的 C++ 类,并以某种方式将其声明(这就是魔法发生的地方)到 QtScriptEngine 以便评估像“a+b”这样的 js 表达式因为他们会在 C++ 方面?

0 投票
2 回答
12279 浏览

c++ - 与 QtScript 相比,使用 Qt 的 Lua 有多容易?

我刚刚开始使用 Qt 进行 C++ 开发。但是,我也有兴趣使用 Lua 编写我的应用程序脚本,因为各种文章都说明了它在编写应用程序的工作流/ui/glue 时的开发速度(易用性)。但是,开箱即用的 Qt 不支持它,而是包含 QtScript。

我的问题基本上是我应该尝试将 Lua 与 Qt 一起使用来开发商业应用程序,还是坚持使用 SDK 中提供的 QtScript?我猜主要是开发速度与稳定性的问题。

0 投票
1 回答
517 浏览

overriding - override operator with qtscript

I want do a math editor using qtscript. It will support array calculating in script. Such as array1 + array2 = array3.({1,2,3}+{3,4,5} = {4,6,8}); Maybe I need override operator+, I consult the example of QByteArray, and I override operator+,but when I execute in Script,it can't be invoke,anyone coule give me some suggestions?

If this couldn't be realised,maybe the one way is to replace all the operator to the custom function.

0 投票
2 回答
476 浏览

c++ - QScript 的问题

我整天都在努力让这段代码正常工作。它应该与 QScript帮助页面中显示的代码相同,但不幸的是它根本不起作用!

如果我尝试在 JavaScript 中评估以下代码

我应该获得:

相反,我真正获得的是来自 toString 函数的白色字符串(可能正在调用 Object.toString 函数)和“解释器错误:第 2 行:TypeError:表达式'p.myPrint' [undefined] 的结果不是函数。 ” 来自 myPrint 的错误消息。我想我没有正确地将这两个函数连接到 Person 原型,即使我试图完全按照文档页面进行操作……请有人解释一下我的错是什么?!?谢谢!

0 投票
2 回答
2624 浏览

c++ - 处理导出到 QtScript 的函数中引发的 C++ 异常

我在我的应用程序中使用 Qt 脚本引擎作为用户访问其功能的替代方式。因此,我将一些 C++ 类导出到 Qt ScriptEngine,它将作为应用程序的接口。问题是,这些 C++ 类可以抛出异常。

我有一个在自己的线程上运行的“ScriptInterface”类,监听处理脚本的请求。因此,当我评估用户的脚本时,我在它周围有一个 try/catch 块来处理异常,并将错误打印到应用程序的控制台。

这在 Windows 中完美运行......但在 linux 中不起作用 - 程序以以下消息终止:

我有一种预感,这是因为异常冒泡到事件处理程序(因为脚本引擎使用信号来调用我导出的类中的函数),所以我重新实现了 QApplication::notify,以在那里处理异常,但它们不是没有抓住。

我的问题是,我在做一些根本错误的事情吗?此外,作为替代方案,是否可以从我的 C++ 类中显式抛出脚本异常?

提前致谢

编辑:修复了描述以包含 catch(...) 语句。

更新(解决方案):我通过遵循类似于已接受答案中概述的策略来“解决”这个问题。虽然我还没有找到为什么异常不会在 linux 上被捕获的根源(我现在怀疑是 m_engine->evaluate 在 linux 上生成一个单独的线程),但我已经开始使用预期的异常抛出方式在 Qt 脚本中,即QScriptContext::throwError().

在我的函数看起来像这样的情况下:(随机示例)

现在是这样的:(特别注意返回类型)

那么在哪里处理这些脚本错误呢?调用后QScriptEngine::evaluate()可以查看是否有未捕获的异常,用QScriptEngine::hasUncaughtException(),用 获取错误对象uncaughtException(),现在脚本中出现错误的消息、trace、行号就知道了!

希望这可以帮助某人!

0 投票
1 回答
695 浏览

c++ - 将自定义对象从 QtScript 传递到 C++ 时出错

我编写了一个自定义类,可以通过原型在 QtScript 中使用。还有另一个全局类可用,它应该用于打印在 QtScript 中生成的自定义类。

这是我的自定义类(非常简单;)):

这是我正在使用的原型:

setter / getter 仅通过 qscriptvalue_cast(QScriptable::thisObject()); 更改/打印相应的 Message 对象。

现在我的脚本如下所示:

所以,脚本编译得很好, print() 命令做了它应该做的,它打印 5。但问题是我的 GlobalObject 的 sendMessage 函数:

这段代码总是打印:“[Message] 0 0”。

MessageAnalysis 注册为 QtScript 的“GlobalObject”。此外,我已将 Message 和 Message* 注册为元类型以及构造函数、原型和其他所有内容。这似乎有效。

有谁知道为什么 QtScript 中的值已更改但无法从我的 C++ 函数中访问?或者我做错了什么?

0 投票
2 回答
622 浏览

javascript - JavaScript 中的链式构造函数

我正在尝试在 JavaScript 中实现某种类层次结构。我想我理解了原型链,但我仍然需要理清构造函数链。按照大卫弗拉纳根的权威指南,我写了

哪里BaseClass()是我用 C++ 编写的本机函数(我正在使用QtScript)。我的问题是,然后,BaseClass()它被称为函数,而不是构造函数。

我可以编写代码BaseClass()以始终充当构造函数,但是它被调用了。但我担心有一天我的一个用户可能会忘记new 并只是写

在这种情况下,我BaseClass()想做一些比初始化全局对象更明智的事情。例如:

但是随后构造函数链接失败!

有没有办法可以链接构造函数并BaseClass() 实际上被称为构造函数?还是我应该教育我的用户永远不要忘记new?现在我很想通过以下方式替换上面的测试:

但我想知道是否有更清洁的方法来处理这个问题。

谢谢!

0 投票
1 回答
1620 浏览

c++ - 设计接受从 QtScript 传递的可变数字参数的 C++ 方法

我正在学习 QtScript 并写了几个简单的例子。如果我将参数限制为简单类型,则映射很简单。

我现在希望能够将可变数量的参数从 QtScript 传递给 C++ 类,例如

如何在 C++ 实现中声明方法?