Russian Qt Forum
Март 29, 2024, 04:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ListView количество элементов и обращение к ним  (Прочитано 5109 раз)
shtrix
Гость
« : Февраль 22, 2018, 18:01 »

Qt 10.1
QtCreator 4.5.1
Код:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
Window {
    visible: true
    width: 150
    height: 250
   
    ScrollView {
        anchors.fill: parent
       
        ListView {
            id:list
            width: parent.width
            model: 5
            delegate: ItemDelegate {
                property alias title: title.text
                width: parent.width
               
                Label{
                    id:title
                    text:"Item "+index
                }
               
                onClicked: {
                    console.log("list.count=",list.count)
                    for(var i=0;i<list.count;i++){
                        console.log(list.contentItem.children[i].title)
                    }
                   
                }
            }
        }
    }
}
Отображается все как положено.

По клику получаю в консоль :
Код:
qml: list.count= 5
qml: Item 0
qml: undefined
qml: Item 1
qml: Item 2
qml: Item 3

Не пойму что происходит .  Почему второй Item undefined
То есть чтобы адекватно получить все значения надо пропускать элемент с индексом 1  как то так :
Код:
for(var i=0;i<list.count;i++){
    i==0?console.log(list.contentItem.children[i].title)
           :console.log(list.contentItem.children[i+1].title)
}
Получаю в консоль :
Код:
qml: list.count= 5
qml: Item 0
qml: Item 1
qml: Item 2
qml: Item 3
qml: Item 4
Но как я понимаю такого быть не должно.
Подскажите в чем проблема?
Записан
Igorkam
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #1 : Февраль 26, 2018, 11:20 »

А что будет, если вывести index в onClicked?
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Май 18, 2018, 21:32 »

Очевидно что в list.contentItem лежит еще один какой-то невидимый элемент, не твой ItemDelegate, возможно какая-то особенность реализации.

Код:
qml: list.count= 5
qml: QQuickItemDelegate_QML_0(0x262dd10)
qml: QQuickItem(0x2784e90)
qml: QQuickItemDelegate_QML_0(0x266a3d0)
qml: QQuickItemDelegate_QML_0(0x27a0970)
qml: QQuickItemDelegate_QML_0(0x279ee70)

Более того так неправильно перебирать итемы, так как ListView создает их по мере появления в области видимости и уничтожает при уходе итема из неё. Поэтому если ты перебираешь детей у contentItem, там будут к примеру с десятого итема по двадцатый в зависимости от позиции скролла.
Записан

Гугль в помощь
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 23.