问题标签 [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 回答
725 浏览

c++ - 弹出对话框以将文件保存在单独的线程中

我有一个函数,当单击按钮时,它会在与主线程不同的线程中调用,它会调用该QFileDialog::getSaveFileName()函数来获取用户保存的文件的文件句柄,但我不能在单独的线程上执行此操作,因为它修改 GUI,您不能这样做。

我怎样才能解决这个问题?

0 投票
2 回答
484 浏览

javascript - 向现有 QT 应用程序添加 javascript 支持

我目前有一个功能 QT 应用程序,有几个按钮。

我需要直接从 javascript 控制我的应用程序,如下例所示,其中 AccessControl 是我的 QObject 类:

我现有的应用程序像这样连接信号和插槽:

我是 QT 的初学者,我想做的就是让用户可以使用脚本而不是单击 UI。

我已经阅读了 QTScript 文档,但我确实很难理解它。

如果有人可以向我解释如何做到这一点,或者如果您有一些好且容易理解的例子,那就太好了!

编辑以获取有关我的问题的更多信息:

我的应用程序是一个访问控制模拟器。我有几个按钮来开门、关门、配置价格……我想编写这个应用程序的脚本,以便在每个可能的情况下创建测试,而不需要点击 UI 的用户在场。

谢谢。

0 投票
1 回答
238 浏览

javascript - TypeError 在 C++ 应用程序上使用 QTScript

我正在尝试实现为现有 QT 应用程序编写脚本的可能性。

它工作正常,但我的类的某些函数返回一个 TypeError。

Myclass.h(真的很简单):

Myclass.cpp:

主要的 :

剧本 :

和(奇怪的)结果:

其中 5 是 firstfunction() 的结果,[1] 是 secondfunction() 的结果。

当然,我的函数的结果不是函数,这很正常,不是吗?

我不明白为什么一个在工作而另一个不在工作(但因为 [1] 显然是 secondfunction() 的良好返回值而被评估)

(我确实简化了所有代码,也许问题来自其他地方,但这显然很奇怪)

任何想法 ?谢谢。

0 投票
0 回答
139 浏览

c++ - QtScript - 从不同的线程调用插槽

我有一个使用 QtScript 的应用程序。QtScript 在单独的线程中执行,这意味着如果我想从主线程小部件访问插槽,我需要某种形式的同步。在 C++ 中,这可以通过以下方法轻松完成:invokeMethod

由于 qtscript 使用一些内部抽象来将 javascript 与 c++ 类绑定,它让我认为它可以通过相同的 invokeMethod。这意味着如果我从不同的线程调用插槽,线程就会被同步,但如果我不这样做,我会随机崩溃,可能只有在应用程序投入生产时才会发生。如果我不信任 qtscript,我必须编写一个 Wrapper,它被调用并使用 invokeMethod 调用调用所有方法,这也很糟糕。

问题是:qtscript 插槽调用是否正确同步以及如何检查?(我在带有 Qt5.1 的 Windows 上运行)

0 投票
2 回答
1311 浏览

c++ - 停止评估 Qt 脚本

我最近在模拟器上添加了一个脚本功能。我在 GUI 上添加了一个“启动脚本”按钮,它能够启动脚本的评估。

我的 main 创建了一个 QThread (scriptThread) 来评估我的脚本。我的 QMainWindows 向调用 scriptThread 插槽的主发送信号。

我希望能够在需要时从 GUI 启动和停止脚本。我首先调用了 scriptThread 的 terminate() 插槽。但它破坏了我的 Qthread,并且在取消它后我无法重新启动脚本(因为我已经在我的 main 开始时创建了我的 scriptThread)。

这是我主要的一部分:

这是我 scriptThread 中的 run() 函数:

GUI有趣的功能:

所以我的问题是,如何在不破坏线程的情况下取消对脚本的评估?我已经尝试过 quit() 插槽,但它仅用于事件循环。是否有现有的插槽或小技巧可以做到这一点?

谢谢。

0 投票
2 回答
962 浏览

javascript - 优化 QScriptEngine 重复动作

我正在尝试在我的一个函数中优化 QScriptEngine 操作。

该函数被命名executeCustomJSOperation,它在多个文件中执行相同的 JS 代码。但是,每个文件都需要更改一个名为$xmlData. 该函数基本上使用变量将 XML 文件加载到内存中$xmlData,然后始终应用相同的 javascript 代码 ( jsString) 来使用 javascript 编辑此 XML 文件。最后,$xmlData变量再次使用编辑过的 XML 更新。

parallel for在处理每个 XML 文件的 for 循环上,我只使用 OpenMP 就获得了 2.5 的加速。但是现在我不知道如何进一步提高这个功能的速度。

代码如下:

您认为可以进一步优化此代码吗?如果您有任何疑问,请询问。

0 投票
1 回答
129 浏览

c++ - QtScriptEngine:从脚本中的对象访问子对象

我想通过如下脚本访问我的 CoreProxy 实例中的存储对象:

但是 QScriptEngine 给了我这个错误:

这是我的 CoreProxy 类:

还有我的 StorageProxy 类:

我在 StorageProxy 的构造函数中添加了这个,但我没有设法访问存储成员:

我的代码中是否缺少某些内容?

0 投票
0 回答
89 浏览

qt - 在 QtScript 中获取对象的匿名函数以供以后调用

如何将匿名函数放入对象/变量中并将其存储以供以后调用?

假设我有这个 JS:

我怎样才能callMeLater从我的存储QScriptValue objectobject.toString(),以便我engine.evaluate以后可以喂它,遗憾的是不起作用。我可以简单地从 JS 内部填充callMeLater一个字符串,但这感觉不对。

0 投票
1 回答
135 浏览

c++ - 我可以从 QtScript 向 QObjectList 添加新值吗?

函数 qScriptValueFromSequence 允许我从 QObjectList 在 QtScript 中创建一个数组,当我在脚本中修改它们时 QObject 属性会发生变化。如果用户向脚本中的数组添加一个新对象,我想将一个新 QObject 添加到相应的 QObjectList,从用户在脚本对象中指定的属性设置其属性。但是,当我尝试在脚本中的数组末尾添加一个新值时,QObjectList 的大小保持不变。有没有办法让这种行为自动发生,或者我必须手动检查数组的 QScriptValue 并相应地向 QObjectList 添加新元素?

0 投票
1 回答
138 浏览

c++ - 我可以将 QScriptEngine.toScriptValue 与 QPointer 一起使用到 QObject 吗?

关于使用 QtScript以及在脚本值和 C++ 之间来回转换的文档提到您可以使用 QScriptEngine.toScriptValue 和 QObject* 类型并让它自动工作,转换对象并相应地返回脚本引用。这种相同的行为是否适用于 aQPointer<QObject>还是我必须创建自己的元类型?如果是这样,它是否也适用于处理 QPointers 到 QObject 子类?

我感兴趣的主要事情是,如果我将 QPointer 上的 QScriptEngine.toScriptValue 调用到子类实例而不是常规指针,是否将使用 QObject 子类的 Q_PROPERTY 声明的属性自动带入脚本。