Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QPaint::save()和QPaint::restore()做什么?_Qt - Fatal编程技术网

Qt QPaint::save()和QPaint::restore()做什么?

Qt QPaint::save()和QPaint::restore()做什么?,qt,Qt,我不确定调用save()和restore()时,QPainter会做什么 它是保存正在绘制的图像,还是只保存诸如penWidth和color等信息? 我可以用它来恢复以前绘画活动的图像吗?来自: 您可以随时通过调用save()函数保存QPaint的状态,该函数将所有可用设置保存在内部堆栈上。restore()函数将它们弹出 所有这些设置都列在给定的链接上。因此,它只是保存绘制设置,而没有实际绘制的内容。如果经常使用save/restore,最好有一个小RAII类(“PainterSaver”),

我不确定调用
save()
restore()
时,
QPainter
会做什么

它是保存正在绘制的图像,还是只保存诸如
penWidth
color
等信息?
我可以用它来恢复以前绘画活动的图像吗?

来自:

您可以随时通过调用save()函数保存QPaint的状态,该函数将所有可用设置保存在内部堆栈上。restore()函数将它们弹出


所有这些设置都列在给定的链接上。因此,它只是保存绘制设置,而没有实际绘制的内容。

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

由于您可能正在更改油漆的颜色和样式或任何其他设置,您通常希望退出油漆功能时使用的设置与进入时相同。因此,在更改画师设置之前使用
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
}

painter->save()
将绘制程序的状态放在堆栈上,
painter->restore()
从堆栈中提取状态并更改设置以匹配该状态。

(有关相同概念,请参阅QMutexLocker)我们得到了
QSignalBlocker
。我真的很想知道为什么我们从来没有一个
QPainterStateRestorer
?更详细地说,这可以让你做一些事情,例如:你设置一支笔,做一些绘图,保存,更换笔,做一些绘图,恢复,用原始笔再做一些绘图。链接失效,也许你可以在答案中包含列表?