Что делает QPainter:: сохраните () и QPainter:: восстановление () делает?

Я не уверен, что это - это QPainter делает, когда я вызываю save() и restore().

Это сохраняет образ, который это рисует, или это просто сохраняет информацию как penWidth и color и т.д.?
Я мог использовать его для восстановления изображения предыдущего события краски?

9
задан Azeem 25 August 2018 в 08:32
поделиться

3 ответа

Из документации:

Вы можете в любое время сохранить состояние QPainter, вызвав функцию save(), которая сохраняет все доступные настройки во внутреннем стеке. Функция restore() возвращает их обратно.

Все эти настройки перечислены в приведенной ссылке. Так что это просто сохранение настроек рисования и ничего, что на самом деле нарисовано.

9
ответ дан 4 December 2019 в 09:35
поделиться

Если часто использовать сохранение/восстановление, то хорошо иметь небольшой RAII-класс ("PainterSaver"), чтобы убедиться, что каждое сохранение() (выполняемое в ctor) имеет соответствующий вызов restore() (выполняемый в dtor), иначе можно столкнуться с неприятными ошибками "несбалансированного сохранения/восстановления".

4
ответ дан 4 December 2019 в 09:35
поделиться

Поскольку вы, вероятно, меняете цвет и стиль или любые другие настройки краски, вы обычно хотите выйти из функции рисования с теми же настройками, что и при входе. Поэтому вы используйте 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 () извлекает состояние из стека и изменяет настройки в соответствии с ним.

9
ответ дан 4 December 2019 в 09:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: