使用Overlay Widget绘制的QT Clear painter canvas Widget

时间:2018-02-05 09:26:44

标签: c++ qt5

我已引用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());会清楚点。但是,它也将明确潜在的观点。

2 个答案:

答案 0 :(得分:1)

好吧,我总是这样做:

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

答案 1 :(得分:0)

我不知道它是如此简单......

简单地删除m_overlay的实例。

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