QT------QPainter::save() 和 QPainter::restore() 的使用方法和作用。
painter.save()
作用:将当前 QPainter 的所有状态压入内部的状态栈中保存
保存的状态包括:
画笔(Pen)的设置(颜色、宽度、样式等)
画刷(Brush)的设置(颜色、样式等)
字体(Font)的设置
变换矩阵(Transformations)
视口(Viewport)和窗口(Window)设置
渲染提示(Render hints)
剪切区域(Clip region)
painter.restore()
作用:从状态栈中弹出最近保存的状态,并恢复到该状态
效果:撤销所有在 save() 之后对 painter 所做的设置更改
使用模式
void MyWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);// 初始状态(状态A)painter.setPen(Qt::black);painter.setBrush(Qt::white);painter.save(); // 保存状态A到栈中// 临时修改状态(变为状态B)painter.setPen(Qt::red);painter.setBrush(Qt::blue);painter.drawRect(10, 10, 100, 100); // 用红色边框蓝色填充绘制矩形painter.restore(); // 恢复为状态A(黑色笔,白色画刷)// 现在仍然是状态Apainter.drawRect(150, 10, 100, 100); // 用黑色边框白色填充绘制矩形
}
注意事项
- 必须成对使用
// 正确用法
painter.save();
// ... 绘图操作
painter.restore();// 错误用法:不匹配的save/restore
painter.save();
painter.save();
painter.restore();
// 缺少一个restore!
- 栈式结构(LIFO)
painter.save(); // 压入状态1
painter.save(); // 压入状态2
painter.save(); // 压入状态3painter.restore(); // 弹出状态3
painter.restore(); // 弹出状态2
painter.restore(); // 弹出状态1