Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: StepLg от Сентябрь 27, 2007, 14:23



Название: [Qt] проблема с обновлением изображения в графике
Отправлено: StepLg от Сентябрь 27, 2007, 14:23
Не могу разобраться, в чем проблема: есть класс, потомок QGraphicsItem, у него функция типа

Код:
void StarsBackGround::Generate()
{
    this->clear(); // функция просто удаляет все элементы из children()
    srand( (unsigned)time( NULL ) );
    for (int i=0; i<this->stars_number; ++i)
    {
        int rx = rand() % this->width + this->xpos;
        int ry = rand() % this->height + this->ypos;
        StarClass* s = new StarClass(this->starscolor);
        s->setPos(rx, ry);
        s->setParentItem(this);
    }
    this->update();
}



StarClass - тоже потомок QGraphicsItem

Дальше я делаю так:

Код:
QGraphicsScene *scene = new QGraphicsScene;
stars_back = new StarsBackGround(-width/2, -height/2, width, height);
stars_back->Generate();
scene->addItem(this->stars_back);



все отображается. но если где-то еще раз вызвать

Код:
stars_back->Generate();
scene->update(scene->sceneRect());


то при этом сцена действительно очищается от старых элементов, но новые на ней не отображаются! при том что генерируются, это точно. Как заставить scene действительно перерисовать изменившиеся элементы?

да, если при создании сцены и StarBackGround вызывать следующие функции в другом порядке:

Код:
scene->addItem(this->stars_back);
stars_back->Generate();


то тоже ничего не рисуется



Название: Re: [Qt] проблема с обновлением изображения в графике
Отправлено: Racheengel от Сентябрь 27, 2007, 20:30
а добавить новые элементы к сцене не забыл?


Название: Re: [Qt] проблема с обновлением изображения в графике
Отправлено: StepLg от Сентябрь 27, 2007, 21:08
а их нужно добавлять к сцене? То есть если у меня есть элемент А, добавленный к сцене, а к элементу А добавлен элемент В, то мне его нужно еще и к сцене прикрепить?

Но если так, то почему же в первом случае все работает, когда я прикрепляю сначала элемент В к элементу А, а потом А к сцене?

По-моему вместе с отображением самого элемента отображаются и все его дочерние..