Reputation: 13
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
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
Reputation: 593
Well, I always do it always specific:
painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::NoPen);
painter.drawRect(rect());
Upvotes: 1