我在使用QPainter绘制的QWidget上有缺点,有没有办法删除某个椭圆(在某个坐标处)?
由于
答案 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可能是一个不错的选择,如果你必须管理很多这样的元素。