Я не уверен, что это - это QPainter
делает, когда я вызываю save()
и restore()
.
Это сохраняет образ, который это рисует, или это просто сохраняет информацию как penWidth
и color
и т.д.?
Я мог использовать его для восстановления изображения предыдущего события краски?
Из документации:
Вы можете в любое время сохранить состояние QPainter, вызвав функцию save(), которая сохраняет все доступные настройки во внутреннем стеке. Функция restore() возвращает их обратно.
Все эти настройки перечислены в приведенной ссылке. Так что это просто сохранение настроек рисования и ничего, что на самом деле нарисовано.
Если часто использовать сохранение/восстановление, то хорошо иметь небольшой RAII-класс ("PainterSaver"), чтобы убедиться, что каждое сохранение() (выполняемое в 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 ()
извлекает состояние из стека и изменяет настройки в соответствии с ним.