Qt update() не работает

У меня проблема, что функция update() в QGraphicsItem не работает Что я хочу сделать, это когда я двигаюсь по кругу, другие QGraphicsItem(в то же время округлый) меняет цвет. Это пример того, что я хочу сделать:

circle.cpp:

void CircleItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    // RoundRect Object
    RectItem->SetBackGround();
    QGraphicsItem::mouseMoveEvent( event );
}

RoundRect.cpp:

void RoundRectItem::SetBackGround()
{
    ChangeBackground = true;
    update();
}

void RoundRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QRectF rec = QRectF( QPoint( 0,0 ), boundingRect().size() / 2 );

    roundRect = QRectF(rec.adjusted(-rec.height() / 2, 0, rec.height()/2, 0));

    roundRect.moveTo( boundingRect().center().x() - roundRect.width() / 2,
                      boundingRect().center().y() - roundRect.height() / 2 );

    if( !ChangeBackground )
        painter->setBrush( backBrush );
    else
        painter->setBrush( QBrush( Qt::blue ) );

    painter->setPen( QColor( 255,255,255 ) );

    painter->drawRoundedRect(roundRect, roundRect.height() / 2, roundRect.height() / 2 );
}

Итак, вопрос в том, как я могу сделать это update() работать правильно.

1 ответ

Решение

Вы вызываете метод update() класса QGraphicsItem. Вы должны вызвать update() из QGraphicsView, с которым вы работаете. Например, вы можете сохранить свой QGraphicsView как класс-член вашего элемента, например:

QGraphicsView * parent;

И вызвать его метод обновления, когда вы хотите, чтобы изменения произошли, например:

void RoundRectItem::SetBackGround()
{
    ChangeBackground = true;
    parent->update();
}
Другие вопросы по тегам