[Qt] проблема с обновлением изображения в графике

oleg1331

Не могу разобраться, в чем проблема: есть класс, потомок 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 действительно перерисовать изменившиеся элементы?

oleg1331

да, если при создании сцены и StarBackGround вызывать следующие функции в другом порядке:
    
scene->addItem(this->stars_back);
stars_back->Generate;

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

spitfire

По всей видимости, кто-то, кто должен получать QPaintEvent, его не получает.

oleg1331

QPaintEvent - это для QWidget
У меня же работа с QGrahpicsItem,
там есть функция update:
void QGraphicsItem::update ( const QRectF& rect = QRectF )
This function does not cause an immediate paint; instead it schedules a paint request that is processed by QGraphicsView after control reaches the event loop
Апдейт вызывается, но вот QGraphicsView отказывается отображать новую информацию. И я не понимаю почему...
Оставить комментарий
Имя или ник:
Комментарий: