I have a problem , that update() function in QGraphicsItem
doesn't work. What I want to do is , when I move circle , other QGraphicsItem
( in the mean time roundrect ) changes color.
This is a example, what I want to do:
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 );
}
So the question is, how can I make this update()
work right.
You are invoking the update() method of QGraphicsItem. You should call the update() of the QGraphicsView you are working with. For example you can keep your QGraphicsView as a member class of your item like:
QGraphicsView * parent;
And call it's update method when you want the changes take place like:
void RoundRectItem::SetBackGround()
{
ChangeBackground = true;
parent->update();
}
来源:https://stackoverflow.com/questions/22900106/qt-update-doesnt-work