QPainter :: save()和QPainter :: restore()有什么作用?

yan*_*nce 9 qt

我不能肯定它是什么,QPainter确实,当我调用save()restore().

难道节省它绘制的图像,或只是保存等有关的信息penWidthcolor等?
我可以用它来恢复上一个油漆事件的图像吗?

Job*_*Job 9

文档:

您可以通过调用save()函数随时保存QPainter的状态,该函数将所有可用设置保存在内部堆栈中.restore()函数会弹回它们.

所有这些设置都列在给定的链接中.所以它只是保存了油漆设置而没有实际绘制的任何东西.

  • 详细说明,这可以让你做一些事情,例如:你设置一支笔,做一些绘图,保存,更改笔,做一些绘图,恢复,用原始笔做更多的绘图. (2认同)

Har*_*ich 9

由于您可能正在更改颜色和样式或油漆的任何其他设置,您通常希望使用与进入时相同的设置退出油漆功能.因此,您QPainter::save()在更改油漆工设置之前和QPainter::restore()完成绘图之后使用使用您更改的设置,例如

void paint( QPainter* painter,
            const QStyleOptionGraphicsItem* option,
            QWidget* widget = 0 )
{
    // Painter has certain settings 
    painter->save();
    QPen pen = painter->pen();
    pen.setColor(QColor(200,20,20);
    // Changing settings of painter
    painter->setPen(pen);
    // ... Draw
    painter->restore();
    // Painter has same settings as on entry into this function
}
Run Code Online (Sandbox Code Playgroud)

painter->save()将画家的状态置于堆栈中,painter->restore()从堆栈中拉出状态并更改设置以匹配该状态.


Fra*_*eld 6

如果一个人经常使用 save/restore,最好有一个小的 RAII 类(“PainterSaver”)来确保每个 save()(在 ctor 中完成)都有一个相应的 restore() 调用(在 dtor 中完成),否则人们可能会遇到令人讨厌的“不平衡的保存/恢复”错误。