Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [РЕШЕНО] Как определить в какой айтем в ListView тыкнул пользователь?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Quick
Rocky
Всем привет!

Есть ListView. В нем есть много айтемов. Хочу сделать чтобы при клике мыши на элемент списка он становился активным (т.е. списку установить текущий индекс на индекс "кликнутого" айтема). Вопрос: как определить индекс айтема, по которому кликнул пользователь? Вот я пробовал так:
ListView {
..........
        MouseArea {
        anchors.fill: parent
        onEntered: parent.focus = true

        onClicked: {
            var currentIdx = parent.indexAt(mouseX, mouseY);
            if (currentIdx != -1) parent.currentIndex = currentIdx
        }
    }
}

Но это работает, если элементы списка не "прокручены". Т.е. если айтемы помещаются в сам список так, чтобы для получения доступа к последним айтемам не нужно было проскроллить этот список - то так работает.. А иначе не работает, потому что реальное положение айтема в списке будет определяться offsetY + mouseY. А как получить этот offsetY (смещение прокрутки по вертикали) непонятно.... Или можно как-то по-другому решить проблему?

Спасибо!
Dovgon
Используй сигнал clicked(const QModelIndex &index).
Rocky
Ну, боюсь тут это не поможет...
Rocky
Решение: MouseArea нужно объявлять не в самом ListView, а в делегате. И через него менять индекс модели при клике.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.