User123456
User123456

Reputation: 13

QT Clear painter canvas Widget drawn using Overlay Widget

I have referenced this code to draw points on my widget.

OverLay::OverLay(std::vector<int> &points, QWidget *parent) :
    QWidget(parent),
    m_points(points)
{
    setAttribute(Qt::WA_NoSystemBackground, true);
    setAttribute(Qt::WA_TransparentForMouseEvents, true);
}


void OverLay::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(QPen(Qt::red,2));
    //painter.eraseRect( this->rect() );
    int y_pos = height()/2;
    for(int i=0; i<m_points.size();i++){
        int x_pos = m_points[i];
        QPointF p1 = QPointF(x_pos,y_pos);
        painter.drawPoint(p1);

    }
}

Here am creating new Overlay Widget and drawing

void Dialog::draw_points(std::vector<int> points)
{
        OverLay *m_overlay = new OverLay(points,ui->view->parentWidget());

        m_overlay->setGeometry(ui->view->geometry());
        m_overlay->show();
}

So, everytime, Whenever I call draw_points functions, old drawing will be there. I want to clear the canvas everytime before drawing again.

painter.eraseRect( this->rect() ); will clear points. But, it will also clear underlying view.

Upvotes: 0

Views: 249

Answers (2)

User123456
User123456

Reputation: 13

I did not know it was so simple ..

Simply deleting instance of m_overlay worked.

if(m_overlay!=NULL){
        delete m_overlay;
    }

Upvotes: 0

Johan van Breda
Johan van Breda

Reputation: 593

Well, I always do it always specific:

painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::NoPen);
painter.drawRect(rect());

Upvotes: 1

Related Questions