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

时间:2013-01-16 23:12:59

标签: qml dynamically-generated qt5 qtquick2

在论坛的帮助下,我动态创建了一些按钮,我将一个函数分配给了“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

1 个答案:

答案 0 :(得分:2)

您使用将对象实例传递给按钮操作。例如:

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

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