删除使用qpainter创建的qwidget中的椭圆

时间:2013-02-23 09:55:09

标签: qt qwidget ellipse qpainter

我在使用QPainter绘制的QWidget上有缺点,有没有办法删除某个椭圆(在某个坐标处)?

由于

1 个答案:

答案 0 :(得分:0)

下次不要画画。

在每个paint事件中,paintEvent()的实现从头开始绘制整个窗口小部件或QPaintEvent中指定的rect / region。因此,每个paintEvent都在空白画布上开始,而不是从前一个画布的内容开始。 因此,如果要删除某些内容,则必须通过update()触发重新绘制,然后省略您不想绘制的元素。

void Speedometer::setSpeedLabelEnabled( bool enabled ) {
     if ( m_speedLabelEnabled == enabled )
         return;
     m_speedLabelEnabled = enabled;
     update(); // trigger repaint
}

void Speedometer::paintEvent( QPaintEvent* ) {
     QPainter p( this );
     if ( m_speedLabelEnabled ) {
         p.drawEllipse( ... );
         p.drawText( ..., m_currentSpeed, ... );
     }
}

正如Vinod Paul所说:QGraphicsView可能是一个不错的选择,如果你必须管理很多这样的元素。