QT 如何防止paintEvent()事件自动擦除以前绘制的图片
时间: 2023-12-15 12:06:56 浏览: 135
在Qt中,可以通过以下方法防止paintEvent()事件自动擦除以前绘制的图片:
1. 将要绘制的图片保存为成员变量,这样在每次绘制时都可以使用该图片。如果要更新图片,请先进行新图片的绘制,然后调用update()函数触发paintEvent()事件。
```cpp
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr);
~MyWidget();
protected:
void paintEvent(QPaintEvent *event);
private:
QImage m_image;
};
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
// 加载图片
m_image.load("image.jpg");
}
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
// 绘制图片
painter.drawImage(0, 0, m_image);
}
```
2. 在绘制图片之前,手动设置QWidget的背景为透明。这样在每次绘制时,之前绘制的图片将不会被擦除。
```cpp
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr);
~MyWidget();
protected:
void paintEvent(QPaintEvent *event);
};
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
// 设置背景为透明
setAttribute(Qt::WA_TranslucentBackground);
}
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
// 绘制图片
painter.drawImage(0, 0, QImage("image.jpg"));
}
```
通过以上方法,你可以防止paintEvent()事件自动擦除以前绘制的图片。记得在需要更新图片时,调用update()函数刷新界面。
阅读全文