qpainter 对象不在paintevent函数内画图而在其他函数内画图如何实现
时间: 2023-12-06 15:02:45 浏览: 115
Qt+update函数+paintEvent事件
5星 · 资源好评率100%
在Qt中,如果您想在QWidget的其他函数中进行绘图,而不是在paintEvent函数中进行绘图,您可以使用QPixmap对象和QPainter对象来实现。具体步骤如下:
1. 在QWidget的成员变量中定义一个QPixmap对象和一个QPainter对象:
```
private:
QPixmap m_pixmap;
QPainter m_painter;
```
2. 在QWidget的构造函数中初始化QPainter对象:
```
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
m_pixmap = QPixmap(this->size());
m_pixmap.fill(Qt::transparent);
m_painter.begin(&m_pixmap);
m_painter.setRenderHint(QPainter::Antialiasing, true);
m_painter.setPen(Qt::red);
}
```
3. 在您想要进行绘图的函数中,使用QPainter对象来进行绘图:
```
void MyWidget::draw()
{
m_painter.drawLine(QPointF(0, 0), QPointF(100, 100));
m_painter.drawRect(QRectF(50, 50, 100, 100));
update();
}
```
4. 在paintEvent函数中将QPixmap对象绘制到QWidget上:
```
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0, 0, m_pixmap);
}
```
5. 在您完成绘图后,记得调用update函数来触发paintEvent函数的调用,以便将绘制的图像显示在QWidget上:
```
void MyWidget::draw()
{
m_painter.drawLine(QPointF(0, 0), QPointF(100, 100));
m_painter.drawRect(QRectF(50, 50, 100, 100));
update();
}
```
阅读全文