问题标签 [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++ - 弹出对话框以将文件保存在单独的线程中
我有一个函数,当单击按钮时,它会在与主线程不同的线程中调用,它会调用该QFileDialog::getSaveFileName()
函数来获取用户保存的文件的文件句柄,但我不能在单独的线程上执行此操作,因为它修改 GUI,您不能这样做。
我怎样才能解决这个问题?
javascript - 向现有 QT 应用程序添加 javascript 支持
我目前有一个功能 QT 应用程序,有几个按钮。
我需要直接从 javascript 控制我的应用程序,如下例所示,其中 AccessControl 是我的 QObject 类:
我现有的应用程序像这样连接信号和插槽:
我是 QT 的初学者,我想做的就是让用户可以使用脚本而不是单击 UI。
我已经阅读了 QTScript 文档,但我确实很难理解它。
如果有人可以向我解释如何做到这一点,或者如果您有一些好且容易理解的例子,那就太好了!
编辑以获取有关我的问题的更多信息:
我的应用程序是一个访问控制模拟器。我有几个按钮来开门、关门、配置价格……我想编写这个应用程序的脚本,以便在每个可能的情况下创建测试,而不需要点击 UI 的用户在场。
谢谢。
javascript - TypeError 在 C++ 应用程序上使用 QTScript
我正在尝试实现为现有 QT 应用程序编写脚本的可能性。
它工作正常,但我的类的某些函数返回一个 TypeError。
Myclass.h(真的很简单):
Myclass.cpp:
主要的 :
剧本 :
和(奇怪的)结果:
其中 5 是 firstfunction() 的结果,[1] 是 secondfunction() 的结果。
当然,我的函数的结果不是函数,这很正常,不是吗?
我不明白为什么一个在工作而另一个不在工作(但因为 [1] 显然是 secondfunction() 的良好返回值而被评估)
(我确实简化了所有代码,也许问题来自其他地方,但这显然很奇怪)
任何想法 ?谢谢。
c++ - QtScript - 从不同的线程调用插槽
我有一个使用 QtScript 的应用程序。QtScript 在单独的线程中执行,这意味着如果我想从主线程小部件访问插槽,我需要某种形式的同步。在 C++ 中,这可以通过以下方法轻松完成:invokeMethod。
由于 qtscript 使用一些内部抽象来将 javascript 与 c++ 类绑定,它让我认为它可以通过相同的 invokeMethod。这意味着如果我从不同的线程调用插槽,线程就会被同步,但如果我不这样做,我会随机崩溃,可能只有在应用程序投入生产时才会发生。如果我不信任 qtscript,我必须编写一个 Wrapper,它被调用并使用 invokeMethod 调用调用所有方法,这也很糟糕。
问题是:qtscript 插槽调用是否正确同步以及如何检查?(我在带有 Qt5.1 的 Windows 上运行)
c++ - 停止评估 Qt 脚本
我最近在模拟器上添加了一个脚本功能。我在 GUI 上添加了一个“启动脚本”按钮,它能够启动脚本的评估。
我的 main 创建了一个 QThread (scriptThread) 来评估我的脚本。我的 QMainWindows 向调用 scriptThread 插槽的主发送信号。
我希望能够在需要时从 GUI 启动和停止脚本。我首先调用了 scriptThread 的 terminate() 插槽。但它破坏了我的 Qthread,并且在取消它后我无法重新启动脚本(因为我已经在我的 main 开始时创建了我的 scriptThread)。
这是我主要的一部分:
这是我 scriptThread 中的 run() 函数:
GUI有趣的功能:
所以我的问题是,如何在不破坏线程的情况下取消对脚本的评估?我已经尝试过 quit() 插槽,但它仅用于事件循环。是否有现有的插槽或小技巧可以做到这一点?
谢谢。
javascript - 优化 QScriptEngine 重复动作
我正在尝试在我的一个函数中优化 QScriptEngine 操作。
该函数被命名executeCustomJSOperation
,它在多个文件中执行相同的 JS 代码。但是,每个文件都需要更改一个名为$xmlData
. 该函数基本上使用变量将 XML 文件加载到内存中$xmlData
,然后始终应用相同的 javascript 代码 ( jsString
) 来使用 javascript 编辑此 XML 文件。最后,$xmlData
变量再次使用编辑过的 XML 更新。
parallel for
在处理每个 XML 文件的 for 循环上,我只使用 OpenMP 就获得了 2.5 的加速。但是现在我不知道如何进一步提高这个功能的速度。
代码如下:
您认为可以进一步优化此代码吗?如果您有任何疑问,请询问。
c++ - QtScriptEngine:从脚本中的对象访问子对象
我想通过如下脚本访问我的 CoreProxy 实例中的存储对象:
但是 QScriptEngine 给了我这个错误:
这是我的 CoreProxy 类:
还有我的 StorageProxy 类:
我在 StorageProxy 的构造函数中添加了这个,但我没有设法访问存储成员:
我的代码中是否缺少某些内容?
qt - 在 QtScript 中获取对象的匿名函数以供以后调用
如何将匿名函数放入对象/变量中并将其存储以供以后调用?
假设我有这个 JS:
我怎样才能callMeLater
从我的存储QScriptValue object
?
object.toString()
,以便我engine.evaluate
以后可以喂它,遗憾的是不起作用。我可以简单地从 JS 内部填充callMeLater
一个字符串,但这感觉不对。
c++ - 我可以从 QtScript 向 QObjectList 添加新值吗?
函数 qScriptValueFromSequence 允许我从 QObjectList 在 QtScript 中创建一个数组,当我在脚本中修改它们时 QObject 属性会发生变化。如果用户向脚本中的数组添加一个新对象,我想将一个新 QObject 添加到相应的 QObjectList,从用户在脚本对象中指定的属性设置其属性。但是,当我尝试在脚本中的数组末尾添加一个新值时,QObjectList 的大小保持不变。有没有办法让这种行为自动发生,或者我必须手动检查数组的 QScriptValue 并相应地向 QObjectList 添加新元素?
c++ - 我可以将 QScriptEngine.toScriptValue 与 QPointer 一起使用到 QObject 吗?
关于使用 QtScript以及在脚本值和 C++ 之间来回转换的文档提到您可以使用 QScriptEngine.toScriptValue 和 QObject* 类型并让它自动工作,转换对象并相应地返回脚本引用。这种相同的行为是否适用于 aQPointer<QObject>
还是我必须创建自己的元类型?如果是这样,它是否也适用于处理 QPointers 到 QObject 子类?
我感兴趣的主要事情是,如果我将 QPointer 上的 QScriptEngine.toScriptValue 调用到子类实例而不是常规指针,是否将使用 QObject 子类的 Q_PROPERTY 声明的属性自动带入脚本。