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

qt - 为 QWebFrame javascript 设置 QObject 所有权

我有一个 QObject,它通过 addToJavaScriptWindowObject 接口存在于 QWebFrame javascript 环境中。此 QObject 具有 Q_INVOKABLE 方法,这些方法返回更多在 javascript 中使用的 QObject 指针(如工厂)。Qt 自动将这些 QObject 指针转换为可以在调用 javascript 环境中调用的对象。

问题是,我想让 javascript 承担这个 QObject 的所有权。当前行为是 C++ 环境保留所有权。

我过去直接处理过 QScriptEngine,其中 QObject 工厂对象持有一个指向 QScriptEngine 对象的指针,并使用带有 QScriptEngine::ScriptOwnership 参数的 QScriptEngine::newQObject 创建新对象。这完美地工作。但是对于 QWebFrame javascript 引擎,引擎隐藏在 QWebFrame 内部并且无法访问。

如何将 QObject 返回到 QWebFrame javascript 环境并让 javascript 承担该对象的所有权?

0 投票
1 回答
189 浏览

qt - 如何使 Qt 中的类既可编写脚本又可序列化?

我正在尝试编写一个具有两个基本特征的类:

  • 它需要是可编写脚本的——该类包含许多用Q_INVOKABLE脚本装饰的属性和方法。
  • 它需要可序列化,以便可以注册以qRegisterMetaTypeStreamOperators()存储在QVariants 中。

据我所知,QObject为了使类可编写脚本,我需要派生自。但是,为了使用 注册该类qRegisterMetaTypeStreamOperators(),该类似乎需要有一个默认的复制构造函数——这是QObject派生类所不能具备的。

有没有办法实现这两个目标?

0 投票
1 回答
1091 浏览

c++ - 从通过脚本调用的 C++ 函数调用对象实例

我有一个名为 Jellyfish 的类,它使用单例设计模式:

水母.h

水母.cpp

当我在 main.cpp 并进行测试时,我没有错误:

主文件

但我想Jellyfish在外部 QScript 文件中使用一些静态方法:

水母.h

水母.cpp

最后是解析的脚本:

问题

当我运行应用程序时,getInstance()总是会创建一个新的 Jellyfish 实例。但真正的问题是,在使用 debug( qDebug() << "test";) 的输出上,我可以看到应用程序循环运行,Jellyfish::getInstance();直到我得到一个sgmentation fault.

有人可以帮我理解这一点吗?

0 投票
6 回答
7850 浏览

qt - 在不更改 QWidget 的情况下使用样式表定义选项卡背景?

我想制作一个非常基本的 GUI:选项卡、文本区域。

但我想给我的标签上色,让它们在 MAC、Windows 和 Linux 上看起来总是一样的。

所以,我尝试使用样式表:

但是即使选项卡看起来不错,也有一个问题:选项卡窗格仍然是透明的......

我可以通过添加强制背景颜色:

但是如你所知,这改变了所有小部件的背景颜色,甚至我的 QPlainTextEdit 我仍然想要一个白色背景。更烦人的是,这会重置操作系统皮肤并显示丑陋的滚动条(我真的很想保持原样)。

有没有一种方法可以更改选项卡窗格背景而无需重新设置所有组件?

0 投票
1 回答
216 浏览

c++ - QML 访问不可调用的函数

我需要访问未标记为 Q_INVOKABLE 或 Q_SLOTS 的函数。Qt 脚本模块具有称为defaultPrototype的机制。我想知道在 QML 中是否可能?

我看到 QtDevDays 展示了QtDD12 - QtQuick under the hood - Thomas McGuire并在 18 分钟时,Thomas 展示了纯 QML 小部件应用程序。我认为如果不将一些不可调用的函数导出/公开到脚本环境,你就无法实现它。

QML 中是否有类似 QtScript 中的 defualtPrototype 的机制?

0 投票
1 回答
305 浏览

qt - 无法从 QtScript 访问公共插槽

我有这堂课:

方法定义如下:

我正在尝试访问先前在头文件中定义的公共插槽,如文档所述:

http://doc.qt.digia.com/qt/scripting.html#making-ac-object-available-to-scripts-written-in-qtscript

test.js 文件看起来像这样,就像文档的示例一样:

但我什么也得不到。它似乎没有找到 JavaScript 对象。我错过了什么?

做一个简单的

工作得很好。

编辑: qt4 网页中的一个示例实现了Q_PROPERTY。我试过这个,但得到了相同的结果:

编辑1:尝试像这样实现初始化程序:

依然没有...

编辑2:一些例子也继承自QScriptable

但这也没有什么区别。

0 投票
1 回答
225 浏览

javascript - 用 QtScript 解析 HTML?

这是场景,我使用 QtNetwork 模块从互联网检索 html 页面,

在过去,我只是创建一个新的 QWebPage 对象,然后使用该setHtml()函数加载它并解析它(查找特定的标签和属性),但这看起来很蹩脚。

现在我想我可以通过 QtScript 来做到这一点,我会给出一个 QByteArray 作为输入,然后解析页面,获取一些元素和属性,但是使用 javascript 语法。

即在过去我会QWebElement::findFirst()在它们上加上一个 foreach 循环,现在我想做getElementByID类似的东西,不是用 C++ 代码,而是用纯 js。

那有可能吗?如果是这样,任何人都可以举一个代码示例吗?我正在运行 Qt 4.8.4

或者任何可以避免 QWebElement 样式解析的东西。

0 投票
2 回答
206 浏览

javascript - 如何分析 QtScript 代码?

我知道有一些工具可以分析纯 javascript 代码,例如firebugChrome 的 Developer Tools,但我想知道是否有任何好的工具可以分析 QTScript。或者我如何使用这些工具来分析 QtScript 代码。

这种情况的用例是有一个桌面应用程序,其大部分代码是用 JavaScript 编写的,而一些代码是用原生 QT/C++ 编写的。在那种情况下,如果有人想要分析性能,有哪些工具可以自动进行分析。

0 投票
1 回答
971 浏览

c++ - 将类添加到 QScriptEngine

这是我如何将类的实例添加到 QScriptEngine 的示例:

所有这一切都很好,但我希望能够在我的脚本中创建新的矩形,如下所示:

我怎么做?

0 投票
1 回答
637 浏览

javascript - 匿名 qt 脚本函数的上下文?

我想从 c++ 执行一个匿名 Qt 脚本函数,但无法确定要使用的 QScriptContext。

这是脚本:

这是 c++ 中的 setTimeout 方法:

QScriptValue 对象的调用方法需要一个上下文和参数列表:

编辑:上下文可以是全局上下文,但构建参数列表来调用函数似乎是问题的症结所在。我没有看到任何解释如何从 C++ 构建“参数对象”的内容。有一个属性叫“arguments”但是好像没有填写,或者我还没想好怎么用。