问题标签 [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.
c++ - 如何在 QtScript 中使用 c++ std 复数
我试图找出如何在 QtScripts 中使用复数,以便可以从 QtScript 调用使用复数参数定义的槽。用户也应该可以从脚本中访问复数的基本代数(+、-、exp、...)。
只是为了说明,我想打电话的是:
有任何想法吗?谢谢!
javascript - 是否可以在 QtScript 中使用带有重载运算符的自定义 C++ 类?
有谁知道是否有可能有一个带有重载运算符(如 +、-、*)的 C++ 类,并以某种方式将其声明(这就是魔法发生的地方)到 QtScriptEngine 以便评估像“a+b”这样的 js 表达式因为他们会在 C++ 方面?
c++ - 与 QtScript 相比,使用 Qt 的 Lua 有多容易?
我刚刚开始使用 Qt 进行 C++ 开发。但是,我也有兴趣使用 Lua 编写我的应用程序脚本,因为各种文章都说明了它在编写应用程序的工作流/ui/glue 时的开发速度(易用性)。但是,开箱即用的 Qt 不支持它,而是包含 QtScript。
我的问题基本上是我应该尝试将 Lua 与 Qt 一起使用来开发商业应用程序,还是坚持使用 SDK 中提供的 QtScript?我猜主要是开发速度与稳定性的问题。
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.
c++ - QScript 的问题
我整天都在努力让这段代码正常工作。它应该与 QScript帮助页面中显示的代码相同,但不幸的是它根本不起作用!
如果我尝试在 JavaScript 中评估以下代码
我应该获得:
相反,我真正获得的是来自 toString 函数的白色字符串(可能正在调用 Object.toString 函数)和“解释器错误:第 2 行:TypeError:表达式'p.myPrint' [undefined] 的结果不是函数。 ” 来自 myPrint 的错误消息。我想我没有正确地将这两个函数连接到 Person 原型,即使我试图完全按照文档页面进行操作……请有人解释一下我的错是什么?!?谢谢!
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、行号就知道了!
希望这可以帮助某人!
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++ 函数中访问?或者我做错了什么?
javascript - JavaScript 中的链式构造函数
我正在尝试在 JavaScript 中实现某种类层次结构。我想我理解了原型链,但我仍然需要理清构造函数链。按照大卫弗拉纳根的权威指南,我写了
哪里BaseClass()
是我用 C++ 编写的本机函数(我正在使用QtScript)。我的问题是,然后,BaseClass()
它被称为函数,而不是构造函数。
我可以编写代码BaseClass()
以始终充当构造函数,但是它被调用了。但我担心有一天我的一个用户可能会忘记new
并只是写
在这种情况下,我BaseClass()
想做一些比初始化全局对象更明智的事情。例如:
但是随后构造函数链接失败!
有没有办法可以链接构造函数并BaseClass()
实际上被称为构造函数?还是我应该教育我的用户永远不要忘记new
?现在我很想通过以下方式替换上面的测试:
但我想知道是否有更清洁的方法来处理这个问题。
谢谢!
c++ - 设计接受从 QtScript 传递的可变数字参数的 C++ 方法
我正在学习 QtScript 并写了几个简单的例子。如果我将参数限制为简单类型,则映射很简单。
我现在希望能够将可变数量的参数从 QtScript 传递给 C++ 类,例如
如何在 C++ 实现中声明方法?