Не удаляются дочерние QQuickItem



  • Пишу водопад для панорамы.
    Есть родительский QQuickItem A объявленный как текстура.
    Дочерний класс от QQuickItem B, в нем имеется QImage определенной ширины и высотой в 1 пиксель. Так же, как текстура.
    В родительском имеется массив в котором накапливаются элементы B.
    Создается элемент B
    По пиксельно рисуется строка QImage.
    Строки массива которые были записаны ранее смещаются вниз на 1 пиксель
    Самый первый элемент массива уничтожается.
    Все работает, но происходит утечка памяти и резкий провал FPS при начале уничтожения элемента массива.
    Может вообще иду не тем путем? И есть боле простые решения, но только начал изучать QT.
    Ниже функция.

    void Water::createWater(QList<int> * Samples, int min)
    {
    //Удаление первого
        if (WaterItem.size()>size_h-2){
            WaterItem.last()->setParent(nullptr);
            WaterItem.last()->setParentItem(nullptr);
            WaterItem.last()->deleteLater();
    
               WaterItem.removeLast();
    
        }
    //Создание
             WaterItem.push_front( new WaterLine(currentPos_x,currentPos_y,PANORAMA_WIDTH));
             WaterItem.front()->setParent(this);
             WaterItem.front()->setParentItem(this);
             WaterItem.front()->setZ(2);
    
             WaterItem.front()->image = QImage(WaterItem.front()->size_w, WaterItem.front()->size_h, QImage::Format_RGB32);
             WaterItem.front()->image.fill(0x00000000);
    //Сдвиг элементов массива         
            for (int i=WaterItem.size()-1; i>=0; --i) {
                WaterItem.at(i)->setY(i+1);
            }
    //Заполнение строки Image
                int x=0;
                do{
                    int val=(Samples->at(x)+3)-min;
                    if (val<0) val=0;
                    if (val>80) val=80;
                       WaterItem.front()->image.setPixel(x, 0, acw80_32[val]);//цвета из таблицы уровня
                    x++;
                  } while(x < Samples->size());
    
    }
    

Log in to reply