QT/QML - ilość elementów między jedną, a drugą wartością (problem z algorytmen chyba)

0

Mam w aplikacji zapętlona liste (Listview)
wartosc poczatkowa: 0
wartosc koncowa: 59
Jak index osiagnie wartosc 59, to przeskakuje do elementu 0 z animacja, ale nie cofa sie, tylko idzie do przodu.
Zmienna distance, jest wartoscia o ile elementow ma przeskoczyc do przodu lista.
current_index - aktualny index w liscie
value - index do ktorego ma przeskoczyc lista
listviewID.count - ilosc wszystkich elementow w liscie

Z tego co widze, problem jest z "if(value > current_value)". Jak lista dojdzie do wartosci 0, to glupieje(przewija sie tak szybko, ze ciezko zauwazyc, czy idzie do przodu, czy do tylu) i normuje sie dopiero w okolicy indeksu 5 i tak do elementu 0.
Nie wiem, czy w kodzie jest jakis glupi blad ktorego nie widze, czy moze to problem z lista. Jesli to bylby problem z lista, to jedyne co mi przychodzi do glowy, to animacja, ktora powoduje, ze index nie zdazy sie ustawic.

    function setValue(value = 0)
    {
        var distance = 0

        var current_value = modelID.get(listviewID.currentIndex).itemID

        if(value < current_value)
        {
            distance = current_value - value
        }
        else
        if(value > current_value)
        {
            for (var index = 0 ; index < listviewID.count ; index++)
            {
                if(value !== current_value)
                {
                    console.log("if(value !== current_value): " + current_value)
                    distance++
                    current_value++
                }
                else
                if(value === current_value)
                {
                    break
                }
            }
        }
        else
        {
            distance = 0
        }



        console.log("distance: " + distance)
        mainListView.animation_switch_item_height = mainListView.delegate_height
        mainListView.animation_switch_item_value = distance
        mainListView.animation_switch_item_running = true
    }
0

Udało się naprawić. Problem był jednak z kodem, a nie z listview. Pojawił się jeszcze jeden problem, ale to już chyba będzie wymagało grzebania w innej części kodu. Problem związan jest ze zbyt szybkim wywolywaniem tej funkcji i szybkoscia wykonywania sie animacji. Zamiast listy pojawia się tło. Na szybko rozwiązałem to ustawiając mały czas wykonywania się animacji. W większosci przypadków działa.

    function setValue(value = 0)
    {
        //Jak probuje sie ustawic wartosc, zanim poprzednia animacja sie nie skonczyla, to zakoncz poprzednia animacje
        if(animation_switch_item.running === true)
        {
            animation_switch_item.complete()
            mainListView.animation_switch_item_running = false
            listviewID.contentY = animation_switch_item.to
        }

        var distance = 0

        var current_value = modelID.get(listviewID.currentIndex).itemID


        if(current_value === listviewID.last_value && value === listviewID.first_value)
        {
            distance = 1
        }
        else
        if(value > current_value)
        {
            distance = value - current_value
        }
        else
        if(value < current_value)
        {
            for (var index = 0 ; index < listviewID.count ; index++)
            {
                if(value !== current_value)
                {
                    distance++
                    if(current_value === listviewID.last_value)
                    {
                        current_value = listviewID.first_value
                    }
                    else
                    {
                        current_value++
                    }

                    console.log("if(value !== current_value): " + current_value + " : " + distance)
                }
                else
                if(value === current_value)
                {
                    break
                }
            }
        }
        else
        {
            distance = 0
        }


        console.log("distance: " + distance)
        mainListView.animation_switch_item_height = mainListView.delegate_height
        mainListView.animation_switch_item_value = distance
        mainListView.animation_switch_item_running = true
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1