2

QtWebKit Bridge 文档指出以下内容 -

复合 (JSON) 对象 JavaScript 复合对象,也称为 JSON 对象,是保存键值对列表的变量,其中所有键都是字符串,值可以是任何类型。这可以很好地转换为 QVariantMap,它只不过是 QString 到 QVariant 的 QMap。JSON 对象和 QVariantMap 之间的无缝转换允许以非常方便的方式在 C++ 和 JavaScript 环境之间传递任意结构化数据。原生 QObject 必须确保将复合值转换为 QVariantMaps 和 QVariantLists,并且保证 JavaScript 以有意义的方式接收它们。请注意,JSON 不支持的类型(例如 JavaScript 函数和 getter/setter)不会被转换。

这是否意味着,虽然 JavaScript 能够读取 QVariantList,但无法修改它?

我已经尝试为测试目的添加一个 getter 和 setter -

Q_PROPERTY( QVariantMap Settings READ GetShadowSettings WRITE SetShadowSettings )

当 JavaScript 想要访问来自 QVariantMap 的任何数据时,将调用 getter 函数。不幸的是,当 JavaScript 尝试更新 QVariantMap 时,会再次调用 getter 函数(而不是 setter 函数)。

我可以使用简单的辅助函数修改数据,例如 -

Q_INVOKABLE void Update( QString key, QVariant value ) {
    settings[key] = value;
}

我只是想知道是否有一种方法可以在不需要辅助函数的情况下做到这一点?

4

1 回答 1

0

我将QVariantMap用于 PhantomJS,它工作得很好。例如,WebPage#viewportSize只是其实现中的 QVariantMap。通常的问题是您不能尝试仅更新其属性之一,例如viewportSize.width = 300. 您必须传回一个对象,例如:

viewportSize = { width: 300, height: 200 }.

如果您需要能够做到前者,唯一可能起作用的(丑陋的)解决方法是创建一个辅助对象,例如Size在上述情况下,它具有用于单个属性的正确设置器和获取器并处理桥接的内务处理。

于 2011-07-18T03:04:47.660 回答