Qt 删除使用QPaint创建的qwidget中的椭圆

Qt 删除使用QPaint创建的qwidget中的椭圆,qt,qwidget,ellipse,qpainter,Qt,Qwidget,Ellipse,Qpainter,我在QWidget上有使用QPaint绘制的省略号,有没有办法删除某个椭圆(在某个坐标处) 谢谢下次别再画了 在每个绘制事件上,paintEvent()的实现都会“从头开始”绘制整个小部件或中指定的rect/区域。因此,每个paintEvent都从一个空画布开始,而不是从上一个paint的内容开始。 因此,如果要擦除某些内容,必须通过update()触发重新绘制,然后忽略不希望绘制的元素 void Speedometer::setSpeedLabelEnabled( bool enabled )

我在QWidget上有使用QPaint绘制的省略号,有没有办法删除某个椭圆(在某个坐标处)


谢谢下次别再画了

在每个绘制事件上,paintEvent()的实现都会“从头开始”绘制整个小部件或中指定的rect/区域。因此,每个paintEvent都从一个空画布开始,而不是从上一个paint的内容开始。 因此,如果要擦除某些内容,必须通过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可能是一个很好的选择,以防您必须管理许多这样的元素。

使用QGraphicsSitem,这将更容易使用QGraphics框架将导致重写至少一个小部件,甚至可能更多。问题:更改绘制方法逻辑并计划重新绘制小部件。