Qml редактировать переменный объект или элемент

#qt #function #variables #block #qml

#qt #функция #переменные #блок #qml

Вопрос:

В моем приложении Qt quick я использую c для генерации числа от 1 до 6, которое затем отправляется с сигналом в функцию QML. У меня есть шесть пользовательских Block объектов или элементов (я не уверен, как вы их называете). Блоки называются block1 6 . Я хочу, чтобы функция имела что-то вроде block"i".visible = true , но я не уверен точно, как это сделать. Если бы кто-нибудь мог, пожалуйста, помочь, я был бы очень признателен.

Ответ №1:

Вот способ, которым вы можете избежать необходимости вручную создавать блоки в javascript:

Предполагая, что все блоки являются дочерними элементами одного и того же родительского элемента, вы можете получить к ним доступ как parentsId.children[0] через parentsId.children[5] (или parentsId.children[n] через parentsId.children[n 5] , если у родительского элемента есть n дочерние элементы, которые идут перед блоками).

Итак, что-то вроде этого сработало бы:

 Rectangle {
    // ...

    Item {
        id: blocks

        Block {
            id: block1
            // ...
        }
        // ...

        Block {
            id: block6
            // ...
        }
    }
    // ...

    function makeBlockVisible(i) {
        // subtracting 1 from i because you said i is a number between 1 and 6
        // and we need an index between 0 and 5
        blocks.children[i-1].visible = true;
    }
}
  

Ответ №2:

вместо объявления 6 отдельных блоков, объявите массив шестого размера, и вы можете поступить следующим образом block[i].visible = true .

Комментарии:

1. Как мне объявить массив из 6 блоков в qml?

2. var block = []; Это должно быть сделано в стиле Javascript либо как встроенный, либо во внешнем файле Javascript. Теперь, когда вы хотите создать «блок» (визуальный элемент QML), вам нужно назначить его вот так, динамическим способом, block[0] = Qt.createComponent(«Block.qml»);