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

javascript - Qt:Webkit 中 QtScript 和 Javascript 有什么区别

我熟悉 Web 开发,所以我确切地知道 Javascript 在 webkit 中可以做什么。如果我想在我的应用程序中使用脚本功能,我认为有两种方法:

  1. 使用 qtwebkit 并打开一个运行我自己的 Javascript 脚本的隐藏网页。
  2. 使用 qtscript。

现在我希望我的大部分应用程序逻辑都是用脚本实现的,但我想知道它们之间有什么区别以及如何在不同的情况下选择,webkit 中的 javascript 还是 qtscript?

对不起,如果这个问题不是那么专业。谢谢

0 投票
2 回答
1712 浏览

c++ - QtScript 输出重定向

当我调用此代码时:

输出文本(来自 print 方法)被写入主应用程序的终端。

有没有办法将其重定向到自定义 QIODevice?

0 投票
1 回答
1075 浏览

javascript - 继承 QWidget 的 Javascript 对象

我正在用 Javascript 和 Qt 做一些事情,为了我的目的,我需要一个继承 QWidget 的 javascript 对象。到目前为止,我已经尝试了以下方法:

我从“Test”类实例化对象,并通过调用该show()方法,我得到了小部件:

但是,我收到以下解释器错误:

错误:在运行/评估中:TypeError:Function.prototype.connect:目标不是函数

如果我更改该行this.button.clicked.connect(this.slot);以调用如下定义的静态方法:

程序运行良好,但静态方法是不行的。slot()除了实例化的对象,我不希望任何人调用。

这张照片有什么问题?有没有人有继承 Qt 对象的 Javascript 对象的经验?提前致谢

0 投票
2 回答
1422 浏览

c++ - QScriptValue 作为全局对象的深拷贝

我有一个使用 QtScript 进行自动化的程序。我在脚本引擎的全局范围内添加了一堆 C++ 函数和类,以便脚本可以访问它们,如下所示:

我希望能够连续运行多个脚本,每个脚本都有一个新的全局状态。所以如果一个脚本设置了一个全局变量,比如

我希望在下一个脚本运行之前删除该变量。我这样做的方法是制作脚本引擎的全局对象的深层副本,然后在脚本完成运行时恢复它。但是深层副本不起作用,因为我的system函数突然因错误而中断:

这是我的深拷贝功能,改编自:http:
//qt.gitorious.org/qt-labs/scxml/blobs/master/src/qscxml.cpp

SkipInEnumeration被放入以避免无限循环)

编辑:我认为部分问题是在调试器(QScriptEngineDebugger)中,我添加的函数和构造函数应该显示为 type Function,但在复制后,它们显示为 type Object。我还没有找到一种创建复制现有函数的新函数的好方法(QScriptEngine::newFunction 需要一个实际的函数指针)。

0 投票
2 回答
692 浏览

python - QtScript 内省/反射?

QtScript 是否支持自省/反射(例如,像 python 的 dir()),这将使我能够通过在运行时探索对象模型从内部“映射”一个 api?

0 投票
1 回答
544 浏览

javascript - QtScript中变量影响的问题

我正在尝试在 C++ 端获取脚本简单操作的结果。

我创建一个 QScriptValue (myvar) 并调用engine.globalObject().setProperty("result", myvar); 然后我评估“result = anothervar + 7;” 评估方法返回值正常,但变量结果不正常。如果脚本是“result = anothervar + 7; a=1”,那么结果值是可以的。

作为 Qt 错误看起来太愚蠢了,所以我错过了什么?

谢谢

杰夫

0 投票
3 回答
463 浏览

javascript - 命名空间 QScriptEngine 扩展

有人可以向我解释如何在 QScriptEngine 扩展中获得命名空间吗?我已经设置好了,所以我在 script/ 下有一个目录 foo/,其中正在执行一个 __init__.js 文件。

在我的 C++ 代码中:engine.evaluate("hello();"); // 工作正常

所以我的问题是,像 foo/bar/whatever (foo.bar.whatever) 这样的文件层次结构有什么意义,如果它们都集中到一个全局命名空间中?我看过一些示例,他们尝试在代码中创建命名空间,但如果没有编译器错误,我似乎无法让它工作。

在我的 C++ 代码中:

我是否误解了 Qt 处理命名空间的方式?不管是从哪个文件中获取的,是否真的应该将所有内容都混入一个全局范围?是否有创建这些类型的名称空间的适当示例?谢谢。

0 投票
1 回答
3827 浏览

qt - Qt:Q_PROPERTY,带有用于 QtScript 访问的指针和前向声明

问题

我正在制作一个项目,使用 Q_OBJECT 和 Q_PROPERTY 从脚本中访问一些对象。我有两个问题:

  1. 使使用前向声明的类可编写脚本
  2. 将属性作为指针返回

解释

1. 为什么要前向声明?

类 B 获得对 A 的前向声明,因为由于模板,A 需要头部中的完整 B 类型。B 只需要头部中的不完整类型(A*),因此前向声明是有效的。

2. 为什么要返回一个指针?

我们无法返回副本,因为我们需要访问脚本中的实际对象。我们不能返回引用,因为Qt 不允许槽返回引用- 它们的类型将被忽略,它们只会返回 void*。

代码

可以在 pastebin或 ZIP 存档或最小示例的ZIP 存档上下载完整的代码,用于测试/播放:我需要为前向声明和 MOC 拆分文件。我添加了一个 Makefile 来测试它。制作部门:g++、moc、Qt。

重要部件

脚本中的错误行:

编译错误

当我注释掉上面的 Q_PROPERTY 时,此错误消失。

脚本异常

当省略 Q_PROPERTY 并将 GetA() 方法作为脚本中的插槽调用时,我收到以下异常:

注册 A* 时,qRegisterMetaType<A*>("A*");此更改为:

这表明 GetA() 不返回 A 对象,或者以某种方式返回指针,但脚本无法取消引用它。GetA() 然后实际上返回 a QVariant(A*),这可以以某种方式使用吗?

问题:

  1. 我可以以某种方式从不完整的类型中创建 Q_PROPERTY,或者如何避免前向声明?
  2. 我可以在插槽中返回一个引用吗(可能是一些技巧,例如一个包装指针并“覆盖”脚本的类operator.,如果存在类似的东西)
  3. 我可以以某种方式将 QVariant(A*) 取消引用到 QtScript 中的 A 吗?
0 投票
1 回答
1205 浏览

qt - 如何创建一个 JS 代码可以就地修改的“类数组”属性?

我有一个QObject看起来像这样的派生类:

该类包含一个属性,它是QStrings 的列表。如果我想将此类的实例公开给脚本,可以使用以下方法:

但是,当我在 Javascript 代码中向列表中添加一个字符串时,它实际上并没有添加该字符串:

上面的输出是0,表示该字符串没有添加到列表中。仔细检查 MOC 生成的代码会发现,当contents访问属性时,只contents()调用函数,该函数返回添加项目的列表的副本。原始列表未修改。

如何保留对列表的更改?

0 投票
2 回答
3342 浏览

c++ - Qt Qvariantlist转换成javascript数组不成功

我目前在 Meego 中使用 QML 和 JS 在大部分情况下创建应用程序。现在我偶然发现了一个问题。

从 javascript 我想调用一个 C++ 函数来读取文本文件,解析它,然后返回解析结果的数组。所以我创建了一个名为 parse() 的 Q_INVOKABLE 函数并通过 javascript 调用它

这是 C++ 中的解析函数

可悲的是。当我尝试运行它时,它会给出这样的结果

看起来 C++ 解析函数成功解析了文件。它可以读取它并且可以将它保存到 QVariantList 中。但是在将结果返回到javascript myArray之后仍然[未定义]。转换有问题吗?