Получить данные из TextEdit в QML ListView

У меня есть проблема, и я не могу найти ее решение, надеюсь, вы найдете его здесь: я сделал ListView с его моделью и его делегатом и так далее, например:

Item {
id: creation;   width: parent.width ; height: parent.height
.....
ListView {
        id: mainViewLiist
        model: CreationModel {id: modelCreation}
        delegate: delegateCreation
        width: parent.width; height: parent.height;  x: -(screen.width * 1.5);
        cacheBuffer: 100;
    }
}

делегат включает Text, TextEdit и т. д.... что-то вроде этого:

Component {
id: creationDelegate
Item {
    id: itemCreate
   ....
     Row {
                id: rowSerie
                spacing: 5
                Text {
                    id: seriesLabel
                    text: "Series:"
                    ....
                }

                TextEdit {
                    id: seriesTextEdit
                    text: ""
                    ....
                  }
           }
     .... 
    }
....
}

Внутри того же элемента "создание" также есть панель инструментов с двумя кнопками, что-то вроде этого:

ToolBar { id: toolBarCreation; height: 40;
    width: parent.width;
    opacity: 1.0
    button1Label: "Back"
    button2Label: "Create"
    onButton1Clicked:
    {
      ...
    }
    onButton2Clicked:
    {
        ...
    }
  }

Я хочу вот что: когда я нажимаю вторую кнопку «Создать», я хочу просто показать с помощью console.log(arg1,...), что написано в TextEdit, называемом «seriesTextEdit», для каждого элемента в listView . Например, если мой список содержит 10 элементов, и пользователь вставляет значение во все TexTedit всех элементов, как я могу получить доступ к этим данным? Большое спасибо, Джаммарко.


person Giammarco    schedule 03.04.2012    source источник


Ответы (1)


ListView может быть неправильным классом для использования, поскольку он уничтожает элементы, которые не находятся в видимой области, и создает новые, которые становятся видимыми. Если вы этого не хотите, используйте повторитель.

В любом случае вы можете получить доступ к дочерним элементам ListView с помощью ListView.contentItem.children. Я попробовал, и он содержал дополнительный элемент (возможно, заголовок).

Я бы предложил иметь свойство псевдонима для текста TextEdit (seriesName в моем примере) в корне вашего делегата элемента списка. Вероятно, вам нужно то же самое для индекса, потому что, как сказано, ListView может не содержать элементы для всех элементов вашей модели. Затем вы можете использовать цикл для получения текстов.

print(mainViewLiist.contentItem.children.length);
for (var i = 0, l = mainViewLiist.contentItem.children.length; i < l; i++) {
    var child = mainViewLiist.contentItem.children[i];
    print(i, ": ", child, "=", child.text);
}
person blakharaz    schedule 04.04.2012
comment
Отлично, вы очень помогли, в основном потому, что я не знал класса Repeater, теперь я использую Repeater. Существует ли эквивалент ListView:positionViewAtIndex для повторителя? Я не могу найти это. Кстати, в примере с PhotoViewer они не используют Repeater, но ListView и элементы не уничтожаются, даже если они не видны. HMow они могут сделать это? Еще раз спасибо за вашу помощь - person Giammarco; 21.04.2012
comment
@Giammarco Если вы нашли ответ blakharaz правильным, пожалуйста, сначала примите его ответ;) - person anticafe; 06.06.2012