QT 如何防止paintEvent()事件自动擦除以前绘制的图形
时间: 2023-12-13 13:03:10 浏览: 610
在Qt中,可以通过以下几种方式防止paintEvent()事件自动擦除以前绘制的图形:
1. 在绘制之前使用QPainter的save()方法保存绘图状态,然后在绘制完成后使用restore()方法恢复之前的状态。这样可以保留之前绘制的图形。
```cpp
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
// 保存绘图状态
painter.save();
// 绘制图形
// 恢复绘图状态
painter.restore();
}
```
2. 使用QPainter的setCompositionMode()方法设置绘图模式为QPainter::CompositionMode_SourceOver。这样可以让新绘制的图形覆盖在原有图形上,而不是擦除原有图形。
```cpp
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
// 设置绘图模式
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
// 绘制图形
}
```
3. 重写QWidget的paintEvent()方法,在绘制之前调用QWidget的erase()方法,将擦除背景的操作取消。
```cpp
void MyWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
// 取消擦除背景
painter.eraseRect(rect());
// 绘制图形
}
```
通过以上方法,你可以防止paintEvent()事件自动擦除以前绘制的图形。
阅读全文