QML - 2个动态创建的元素之间的交互



在论坛的帮助下,我动态创建了一些按钮,我在"createObject()"函数中为属性分配了一个函数。现在,在这个函数中,我想引用其他项目,它们也是动态创建的。

(伪)代码目前看起来像这样:

property var money_back: { '50e': 0,
                           '20e': 0,
                           '10e': 0,
                           '5e': 0,
                           '2e': 0,
                           '1e': 0,
                           '50c': 0,
                           '20c': 0,
                           '10c': 0,
                           '5c': 0,
                           '2c': 0,
                           '1c': 0 };
Row{
    id:money_row
    spacing: 5
    Component.onCompleted: {
        var button = Qt.createComponent("BubbleButton.qml");
        var selected = Qt.createComponent("ChangeText.qml");
        for (var prop in change_screen.money_back){
            selected.createObject(money_row,{
                                      "id": "selected_"+prop,
                                      "selected": "0"
                                    });
            button.createObject(money_row,{
                                            "id": "button_"+prop,
                                            // for testing purposes I wanted to make at least the first button work.. of course i want something like 'selected_+prop.selected'
                                            "action": [function(){ selected_50e.selected += 1; }], 
                                            //"ps": ps,
                                            "img_id.source": prop+".png",
                                            "img_id.align": "center",
                                            "color": "transparent"
                                        });
        }
    }

我最后想做的是:为每个硬币/纸币创建按钮,当点击时,我想改变旁边的文本的内容。就像一个计数器,显示我点击了多少次按钮。

有没有比带着信号之类的更简单的方法?(看起来很复杂)

谢谢你的时间和帮助- m

将对象实例传递给按钮动作。例如:

Component.onCompleted: {
    ...
    for (var prop in change_screen.money_back){
        var selectedObject = selected.createObject(...);
        button.createObject(money_row,{...,
                                       "action": [function(){ selectedObject.selected += 1; }], 
                                       ...});

无论如何,我建议您使用Repeater元素来动态创建如此大量的对象

相关内容

  • 没有找到相关文章

最新更新