QML — взаимодействие между двумя динамически созданными элементами

С помощью форума я динамически создал несколько кнопок, которым я присвоил функцию свойства в функции «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"
                                        });
        }
    }

В конце концов, я хочу сделать следующее: создать кнопки для каждой монеты/заметки, и при нажатии я хочу изменить содержимое текста рядом с ним... как счетчик, сколько раз я нажимал кнопку .

Есть ли более простой способ, чем идти по дороге с сигналами и тому подобным? (выглядит сложно)

спасибо за ваше время и помощь -м


person 4x10    schedule 16.01.2013    source источник


Ответы (1)


Вы используете передачу экземпляра объекта действию кнопки. Например:

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

В любом случае, я рекомендую вам использовать элемент Repeater для динамического создания таких огромных количество объекта.

person Dickson    schedule 17.01.2013