【问题标题】:checking/accessing dynamically created objects in QML检查/访问 QML 中动态创建的对象
【发布时间】:2012-08-09 19:01:55
【问题描述】:

有没有办法检查存在和访问 QML/javascript 中动态创建的对象(不使用 C++)?

我正在尝试创建一个具有类似于地图的界面的应用程序 - 给定一个键和一个对象,我的应用程序必须定位是否存在具有该键的对象并用新对象覆盖。如果没有,应用程序必须创建一个新对象并与密钥关联。

文档说动态管理的对象没有 ID,我发现访问它们的唯一方法是使用 objectName,这似乎需要 C++ 应用程序。

提前致谢。

【问题讨论】:

    标签: javascript c++ qt qt4 qml


    【解决方案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”即可。
    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2021-08-10
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多