检查/访问 QML 中动态创建的对象
Posted
技术标签:
【中文标题】检查/访问 QML 中动态创建的对象【英文标题】:checking/accessing dynamically created objects in QML 【发布时间】:2012-08-09 19:01:55 【问题描述】:有没有办法检查存在和访问 QML/javascript 中动态创建的对象(不使用 C++)?
我正在尝试创建一个具有类似于地图的界面的应用程序 - 给定一个键和一个对象,我的应用程序必须定位是否存在具有该键的对象并用新对象覆盖。如果没有,应用程序必须创建一个新对象并与密钥关联。
文档说动态管理的对象没有 ID,我发现访问它们的唯一方法是使用 objectName,这似乎需要 C++ 应用程序。
提前致谢。
【问题讨论】:
【参考方案1】:您可以将 JavaScript 对象用作地图。您不能在 QML 中直接操作它,但您可以将处理此对象的所有代码移动到 JavaScript 文件中并将其作为模块包含在内。 这是一个简单的例子:
Map.js:
var _map = new Object()
function value(key)
return _map[key]
function setValue(key, value)
_map[key] = value
function remove(key)
delete _map[key]
function keys()
return Object.keys(_map)
function process()
for (var key in _map)
/* do something */
QML 示例:
import QtQuick 1.1
import "Map.js" as Map
Item
Component.onCompleted:
Map.setValue("test", "hello")
console.log("test = ", Map.value("test"))
Map.remove("test", "hello")
console.log("test = ", Map.value("test"))
输出将是:
test = hello
test = undefined
【讨论】:
它按预期工作!谢谢。还有没有办法遍历整个地图?我需要同时更改所有对象的值... @Ishida:是的,甚至有两种方法 :) 您可以在 Map.js 函数中定义,返回列表,包含地图中的所有键(您也可以编写函数,返回所有值,如果需要),然后处理该列表。或者您可以直接在 Map.js 中处理地图。我已经用两个函数更新了示例来迭代 Map。此外,在 process() 中,您不仅可以通过键进行迭代,还可以通过值进行迭代——只需将“for”替换为“for each”即可。以上是关于检查/访问 QML 中动态创建的对象的主要内容,如果未能解决你的问题,请参考以下文章