Как в ListView установить currentIndex или currentItem для динамически создаваемого элемента? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть список с моделью списка c ++ и прямоугольник с mousarea в качестве делегата. Внутри моего кода к моей listmodel добавляются данные, и я делаю

beginResetModel();
list.append(element);
endResetModel();

Моя модель обновляется, и элемент выглядит нормально, но я не могу установить currentIndex для вновь созданного элемента.

Я пытаюсь использовать Component.onCompleted внутри делегата, вот так

Component.onCompleted:   {
    ListView.currentIndex = index;
    console.log("Show List: ", ListView.currentIndex, index);
}

Но индекс в выводе журнала говорит, что currentIndex не меняется после того, как я установил его для индекса моей модели.

Я делаю то же самое в моей области мыши, в onClicked, и там все работает нормально.

Как мне сделать мой недавно созданный элемент listview currentItem / currentIndex?

Я используя этот currentIndex для изменения цвета созданного элемента (это внутри моего прямоугольного делегата)

color: ListView.currentIndex == index ?  "lightred" : "darkred"

Есть ли лучшие способы сделать то, что я пытаюсь сделать, возможно?

Full пример кода ниже:

ListView {
    id: listView
    focus: true
    clip: true
    model: listModel
    delegate: Rectangle {
        id: listDelegate
        color: listView.currentIndex == index ?  "green" : "red"
        height: 20
        width: 100
        radius: 2
        Component.onCompleted:   {
            listView.currentIndex = index
            console.log("Show List: ", listView.currentIndex, index)
        }
        MouseArea {
            anchors.fill: parent
            onClicked: {
                listView.currentIndex = index
                console.log("onClicked: ", listView.currentIndex, index)
            }
        }
    }
}

1 Ответ

2 голосов
/ 04 августа 2020

Вы можете просто проверить, когда изменится счетчик, например:

ListView {
    ...

    onCountChanged: {
        listView.currentIndex = listView.count - 1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...