1

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

谢谢

4

1 回答 1

0

下次不要画了。

在每个绘制事件上,paintEvent() 的实现“从头开始”绘制整个小部件或QPaintEvent中指定的矩形/区域。因此,每个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 可能是一个不错的选择,以防您必须管理许多此类元素。

于 2013-03-07T10:06:14.863 回答