问题标签 [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.
javascript - Qt:Webkit 中 QtScript 和 Javascript 有什么区别
我熟悉 Web 开发,所以我确切地知道 Javascript 在 webkit 中可以做什么。如果我想在我的应用程序中使用脚本功能,我认为有两种方法:
- 使用 qtwebkit 并打开一个运行我自己的 Javascript 脚本的隐藏网页。
- 使用 qtscript。
现在我希望我的大部分应用程序逻辑都是用脚本实现的,但我想知道它们之间有什么区别以及如何在不同的情况下选择,webkit 中的 javascript 还是 qtscript?
对不起,如果这个问题不是那么专业。谢谢
c++ - QtScript 输出重定向
当我调用此代码时:
输出文本(来自 print 方法)被写入主应用程序的终端。
有没有办法将其重定向到自定义 QIODevice?
javascript - 继承 QWidget 的 Javascript 对象
我正在用 Javascript 和 Qt 做一些事情,为了我的目的,我需要一个继承 QWidget 的 javascript 对象。到目前为止,我已经尝试了以下方法:
我从“Test”类实例化对象,并通过调用该show()
方法,我得到了小部件:
但是,我收到以下解释器错误:
错误:在运行/评估中:TypeError:Function.prototype.connect:目标不是函数
如果我更改该行this.button.clicked.connect(this.slot);
以调用如下定义的静态方法:
程序运行良好,但静态方法是不行的。slot()
除了实例化的对象,我不希望任何人调用。
这张照片有什么问题?有没有人有继承 Qt 对象的 Javascript 对象的经验?提前致谢
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 需要一个实际的函数指针)。
python - QtScript 内省/反射?
QtScript 是否支持自省/反射(例如,像 python 的 dir()),这将使我能够通过在运行时探索对象模型从内部“映射”一个 api?
javascript - QtScript中变量影响的问题
我正在尝试在 C++ 端获取脚本简单操作的结果。
我创建一个 QScriptValue (myvar) 并调用engine.globalObject().setProperty("result", myvar);
然后我评估“result = anothervar + 7;” 评估方法返回值正常,但变量结果不正常。如果脚本是“result = anothervar + 7; a=1”,那么结果值是可以的。
作为 Qt 错误看起来太愚蠢了,所以我错过了什么?
谢谢
杰夫
javascript - 命名空间 QScriptEngine 扩展
有人可以向我解释如何在 QScriptEngine 扩展中获得命名空间吗?我已经设置好了,所以我在 script/ 下有一个目录 foo/,其中正在执行一个 __init__.js 文件。
在我的 C++ 代码中:engine.evaluate("hello();"); // 工作正常
所以我的问题是,像 foo/bar/whatever (foo.bar.whatever) 这样的文件层次结构有什么意义,如果它们都集中到一个全局命名空间中?我看过一些示例,他们尝试在代码中创建命名空间,但如果没有编译器错误,我似乎无法让它工作。
在我的 C++ 代码中:
我是否误解了 Qt 处理命名空间的方式?不管是从哪个文件中获取的,是否真的应该将所有内容都混入一个全局范围?是否有创建这些类型的名称空间的适当示例?谢谢。
qt - Qt:Q_PROPERTY,带有用于 QtScript 访问的指针和前向声明
问题
我正在制作一个项目,使用 Q_OBJECT 和 Q_PROPERTY 从脚本中访问一些对象。我有两个问题:
- 使使用前向声明的类可编写脚本
- 将属性作为指针返回
解释
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*)
,这可以以某种方式使用吗?
问题:
- 我可以以某种方式从不完整的类型中创建 Q_PROPERTY,或者如何避免前向声明?
- 我可以在插槽中返回一个引用吗(可能是一些技巧,例如一个包装指针并“覆盖”脚本的类
operator.
,如果存在类似的东西)或 - 我可以以某种方式将 QVariant(A*) 取消引用到 QtScript 中的 A 吗?
qt - 如何创建一个 JS 代码可以就地修改的“类数组”属性?
我有一个QObject
看起来像这样的派生类:
该类包含一个属性,它是QString
s 的列表。如果我想将此类的实例公开给脚本,可以使用以下方法:
但是,当我在 Javascript 代码中向列表中添加一个字符串时,它实际上并没有添加该字符串:
上面的输出是0
,表示该字符串没有添加到列表中。仔细检查 MOC 生成的代码会发现,当contents
访问属性时,只contents()
调用函数,该函数返回添加项目的列表的副本。原始列表未修改。
如何保留对列表的更改?
c++ - Qt Qvariantlist转换成javascript数组不成功
我目前在 Meego 中使用 QML 和 JS 在大部分情况下创建应用程序。现在我偶然发现了一个问题。
从 javascript 我想调用一个 C++ 函数来读取文本文件,解析它,然后返回解析结果的数组。所以我创建了一个名为 parse() 的 Q_INVOKABLE 函数并通过 javascript 调用它
这是 C++ 中的解析函数
可悲的是。当我尝试运行它时,它会给出这样的结果
看起来 C++ 解析函数成功解析了文件。它可以读取它并且可以将它保存到 QVariantList 中。但是在将结果返回到javascript myArray之后仍然[未定义]。转换有问题吗?