2013-02-23 5 views
0

У меня есть elipses на QWidget, которые рисуются с использованием QPainter, есть ли способ удалить определенный эллипс (с определенной координатой)?Удалить эллипс в qwidget, созданный с использованием qpainter

Thanks

+1

использование QGraphicsItem, что сделает проще. –

+0

Использование фреймворка QGraphics приведет к перезаписи хотя бы одного виджета и, возможно, гораздо большего. На вопрос: измените логику метода рисования и перерисовку графика виджета. – divanov

ответ

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, ...); 
    } 
} 

Как Винод Павел говорит: QGraphicsView может быть хорошим вариантом, если вы должны управлять много таких элементов.

+0

Я использовал QGraphicsView, но спасибо – abumusamq

 Смежные вопросы

  • Нет связанных вопросов^_^