问题标签 [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.
qt - 如何在 QtScript 中使普通的公共方法可用
在我的 Qt 应用程序中,使用 QtScript 的脚本可以访问对话框的所有控件。为此,我使用 QScriptEngine 的 newQObject 方法,例如:
例如,我现在可以在脚本中执行此操作:
只要已发布控件 ( okButton ) 的调用方法 ( setEnabled )在对象类中被标记为公共槽,这就可以正常工作。不幸的是,我希望能够从脚本调用的许多方法仅在正常的公共范围内定义。
解决这个问题的一种方法是从每个 Qt UI 元素派生一个新类,将这些方法覆盖为公共插槽。但这意味着编码和维护方面的巨大开销,这在这种情况下是不可取的。
有没有办法告诉脚本引擎默认提供普通的公共功能?
qt - QScriptEngine 环境占用多少内存?
我可以通过一个 QScriptEngine 环境测量分配的总内存吗?我有一个应用程序在同一进程中有许多 QScriptEngine 实例,我需要知道每个实例使用多少内存。
c++ - 具有自定义类的 QtScript instanceof 引发与原型相关的错误
我有一个 Qt 项目,它使用 QtScript 模块使我的应用程序的某些组件可编写脚本。
在多次尝试使现有类在 QtScript 中直接可用之后,我选择使用继承 QObject 和 QScriptable 的包装类(主要是因为我有一些非 qobject 派生类被其他继承 QObject 的类继承,它是因此我不可能统一对待我所有的课程)。
我现在正在尝试使用基于原型的继承。
我必须上课Drawable
并且MeshDrawable
有相应的包装器Wrapper_Drawable
和Wrapper_MeshDrawable
. MeshDrawable
继承Drawable
和Wrapper_MeshDrawable
继承Wrapper_Drawable
。
我让脚本引擎 ( m_scriptEngine
) 知道这两个类:
如果我没记错的话,文档说脚本引擎会将原型应用于Wrapper_Drawable
类型对象,Wrapper_MeshDrawable
因为它们在 C++ 中具有继承关系。
我有一个方法Wrapper_Drawable::drawables()
可以返回 a 的所有孩子Wrapper_Drawable
(实际上是包裹在 中的 Drawable 的孩子Wrapper_Drawable
)。作为Drawable
一个抽象类,所有的孩子实际上都是MeshDrawable
s。
因为我希望用户“相信”他使用Drawable
s 而不是Wrapper_Drawable
s,所以我声明:
上面声明了 wrapper_drawable_obj 。
我想测试引擎是否识别Wrapper_MeshDrawable
s,即使它们是在Wrapper_Drawable
s 数组中声明的。
可悲的是, instanceof 抛出此错误:
如果我尝试这样做curChildren instanceof Number
,它会返回 false,所以我猜这个问题与 Wrapper_Drawable 有关,但我无法弄清楚它到底是什么。
预先感谢您的帮助。
编辑 >我添加了 ScriptManager(处理脚本引擎并声明各种类型)、Wrapper_Drawable(只有一些方法,否则我无法发布此消息)和 Wrapper_MeshDrawable 的代码。
我还仔细检查instanceof
了 Wrapper_Drawable 对象,用 Number 返回 false,用 Object 返回 true,并用 Drawable 引发上述错误(与名称不同,这是 Wrapper_Drawable 对象)。
所以,有 Wrapper_Drawable 类的代码:
共产党:
MeshDrawable:
共产党:
最后是 ScriptManager(我在其中向脚本引擎声明各种类型):
CPP
c++ - QtScript 和线程
我想从 QtScript 脚本运行几个并发作业:
这些作业本质上是一系列远程过程调用(ZeroC Ice),需要在多个点同步。
Qt 4.8.0 文档没有提到QScriptEngine
线程安全。我的问题:
QScriptEngine
使用单线程同时从多个线程执行 QtScript 函数是否安全?你会推荐什么方法来完成这项任务?
笔记:
- 脚本不是由程序员编辑,而是由电气工程师编辑,我想让脚本尽可能简单和干净。
qt - QtScript 加枚举
我正在将 QScript 添加到我的 Qt 应用程序中。我已经添加了元数据并使用一些元数据函数来通过 C++ 代码进行查询。这很好——我可以导航对象层次结构并打印出值(包括枚举)。
但是,我看不到让枚举在 Qt 脚本中工作。
我有我的课...
我有另一个类,它有一个将枚举作为参数的方法......
这个类在另一个类中公开 - 对不起,我应该简化这个例子。如果我编写以下 jscript 代码,
我收到一个我期望的错误...
因此,qtscript 似乎知道枚举类型。
我正在努力做的是从 jscript 设置枚举参数。我尝试了很多组合...
还有很多。
如果我尝试使用整数,我会得到......
这似乎暗示 jscript 不知道我的枚举。
有什么建议么?
我是否需要使用 qRegisterMetaType 或 qScriptRegisterMetaType 来访问我的枚举?该文档并不建议我需要这样做。我是否需要为 qScriptRegisterMetaType 方法实现转换器功能。
还是我的语法对于 jscript 是错误的?
有人有一个工作的例子吗?
谢谢,弗兰克
qt - 我需要在 QTscript 中为 Eiskalt DC++ 编写一个脚本。我如何开始学习使用 Qtscript?
我不懂 Javascript,也从未使用过 Qt。我确实使用c ++,但我认为这没有多大帮助?这是一个非常简单的脚本,但我找不到 Qtscript 的任何教程等。
qt - 将 QStringList 公开为 QtScript 数组
我有一些需要对一些 C++ 数据进行操作的 QtScript。我已经通过 公开了许多变量QScriptEngine::globalObject().setProperty()
,但这似乎只适用于简单数据类型和 QStrings。
我试过使用QScriptEngine::newVariant()
,但没有一个QVariant
成员函数暴露给脚本引擎。
理想情况下,我希望能够将 QStringList 转换为普通的 QtScript 数组并在其上调用本机数组函数。有没有办法做到这一点?
javascript - QtScript Javascript 对象失去属性
我创建了一个 QScriptEngine 并将一个 QObject 设置为具有一些信号/插槽的全局对象。然后我加载一些脚本文件并将其传递给引擎(使用评估)。该脚本创建一个对象并将全局对象的一些信号连接到它的函数。
可悲的是,脚本对象的属性(this.password)在从信号调用其函数时被清除(它在评估期间设置,我检查过)。
这是脚本:
任何想法为什么会发生这种情况?
问候本
javascript - qtScript 上 JavaScript 的 setTimeout 等价物是什么?
没什么可补充的;什么是 qtScript 上 JavaScript 的 setTimeout 的等价物?
qt - “使应用程序可编写脚本”是什么意思,我们应该什么时候使用它?
最近我注意到 Qt 中的一些类称为 Qt 脚本模块,根据文档,它用于使应用程序可编写脚本!这是我的问题:
- 这是什么意思?使应用程序可编写脚本?
- 我们应该什么时候使用它?
提前致谢