Не могу разобраться, в чем проблема: есть класс, потомок 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();
то тоже ничего не рисуется