'Will paint(), redraw everything from scene or will redraw only updated items in Qt?

I have QGraphicsView which contains many QGraphicsItem such as Rectangle, polylines. I have overriden paint() method. I am drawing QGraphicsItem using boost-graph. While drawing items, I am storing boost-graph pointer on every QGraphicsItem.
Now I am right clicking on some rectangle from scene and trying to hide it. While hiding it, I am trying to hide lines connected to it also. For that, I am taking boost-graph pointer stored at every item and iterating through it.
In boost graph, there is a flag isVisible, through setting-resetting it, I am hidding-unhidding that item.

myView.cpp

while(true)
 {
    // iterating thorugh boost-graph and finding co-ordinates
    myRect* _rect = new myRect(rect co-ordinates);
    _rect->setBrush(Qt::yellow);
    _rect->setPtr(boost-graph pointer);
    _scene->addItem(static_cast<QGraphicsRectItem*>(_rect));
}
      
void myView::HideSelectedRectangle() // after choosing hide from right mouse click, control comes here
{
    foreach(QGraphicsItem* currentItem, _scene->selectedItems())
    {
        myRect* rItem = qgraphicsitem_cast<myRect*>(currentItem);
        if(rItem)
        {
             VertexDescriptor vPtr = rItem->getBoostPtr();  // getting boost-graph ptr
             // logic for making it hide
             // Question is how paint() will know about this QGraphicsItem that it is hidden? 
        };
    }
}

myRect.h

class myRect: public QGraphicsRectItem
{
public:

    explicit myRect();
    explicit myRect(QRectF &rectPoints,QGraphicsItem *parent = nullptr)
        : QGraphicsRectItem(rectPoints,parent){}
  void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
  void setPtr(VertexDescriptor);
  VertexDescriptor getPtr();
  VertexDescriptor boostPtr;
}

myRect.cpp

    void myRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
    {
        auto copied_option = *option;
        copied_option.state &= ~QStyle::State_Selected;
        auto selected = option->state & QStyle::State_Selected;
        QGraphicsRectItem::paint(painter, &copied_option, widget);
        if(selected)
        {
            painter->save();
            painter->setBrush(Qt::NoBrush);
            painter->setPen(QPen(option->palette.windowText(), 0, Qt::SolidLine));
            painter->drawPath(shape());
            painter->restore();
        }
    }    

void myRect::setPtr(VertexDescriptor vIter)
{
    this->boostPtr = vIter;
}

VertexDescriptor myRect::getPtr()
{
    return boostPtr;
}

Now assume I have made _isVisible = false (which is in boost-graph) for rectangle and some connected lines. And now I want to redraw view using paint(). And expecting, paint() should not draw those rectangle and lines which are marked as not visible.
While doing this :

Is paint() redraw every QGraphicsItem from view or it will redraw only those were updated ?
How paint() will know, which shape should it draw and its co-ordinates ?
Is it possible in my paint(), by checking QGraphicsItem's flag (isVisible) I can guide paint() which items to redraw and which not to redraw ?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source