У меня есть elipses на QWidget, которые рисуются с использованием QPainter, есть ли способ удалить определенный эллипс (с определенной координатой)?Удалить эллипс в qwidget, созданный с использованием qpainter
Thanks
У меня есть elipses на QWidget, которые рисуются с использованием QPainter, есть ли способ удалить определенный эллипс (с определенной координатой)?Удалить эллипс в qwidget, созданный с использованием qpainter
Thanks
Не нарисовать его в следующий раз.
В каждом событии краски реализация 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 может быть хорошим вариантом, если вы должны управлять много таких элементов.
Я использовал QGraphicsView, но спасибо – abumusamq
использование QGraphicsItem, что сделает проще. –
Использование фреймворка QGraphics приведет к перезаписи хотя бы одного виджета и, возможно, гораздо большего. На вопрос: измените логику метода рисования и перерисовку графика виджета. – divanov