我已引用this代码在我的小部件上绘制点。
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);
}
}
这里正在创建新的叠加小部件和绘图
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();
}
所以,每次,每当我调用draw_points函数时,旧的绘图就会出现。我想在每次画画之前清理画布。
painter.eraseRect(this-&gt; rect());会清楚点。但是,它也将明确潜在的观点。
答案 0 :(得分:1)
好吧,我总是这样做:
painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::NoPen);
painter.drawRect(rect());
答案 1 :(得分:0)
我不知道它是如此简单......
简单地删除m_overlay的实例。
if(m_overlay!=NULL){
delete m_overlay;
}