【问题标题】:Delete ellipse in qwidget created using qpainter删除使用 qpainter 创建的 qwidget 中的椭圆
【发布时间】:2013-02-23 09:55:09
【问题描述】:

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

谢谢

【问题讨论】:

  • 使用QGraphicsItem,这样会更容易
  • 使用 QGraphics 框架将导致重写至少一个小部件,甚至可能更多。问题:更改绘制方法逻辑并安排小部件的重绘。

标签: qt qwidget ellipse qpainter


【解决方案1】:

下次不要画了。

在每个绘制事件上,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 可能是一个不错的选择,以防您必须管理许多此类元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多