From 9ecf47a8a8d11227ecf192246d7df7c2c4dc9105 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Tue, 19 Dec 2023 09:41:01 +0100 Subject: Add QPainterStateGuard Add QPainterStateGuard as a small RAII helper class to avoid unbalanced QPainter::save()/restore() calls. Change-Id: I618a5d720b7bc9267a0fbac7dcc90e61f5d9cefd Reviewed-by: Volker Hilsheimer Reviewed-by: David Faure --- .../code/src_gui_painting_qpainterstateguard.cpp | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/gui/doc/snippets/code/src_gui_painting_qpainterstateguard.cpp (limited to 'src/gui/doc/snippets/code') diff --git a/src/gui/doc/snippets/code/src_gui_painting_qpainterstateguard.cpp b/src/gui/doc/snippets/code/src_gui_painting_qpainterstateguard.cpp new file mode 100644 index 00000000000..adcccd60aa1 --- /dev/null +++ b/src/gui/doc/snippets/code/src_gui_painting_qpainterstateguard.cpp @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Christian Ehrlicher +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#include +#include +#include +#include + + +namespace src_gui_painting_qpainterstateguard { +struct MyWidget : public QWidget +{ + void paintEvent(QPaintEvent *) override; + bool drawText = true; + QLine line; +}; +struct MyGuardWidget : public QWidget +{ + void paintEvent(QPaintEvent *) override; + bool drawText = true; + QLine line; +}; + +//! [0] +void MyWidget::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.setPen(Qt::red); + if (drawText) { + painter.save(); + painter.setPen(Qt::blue); + painter.setFont(QFont("Arial", 30)); + painter.drawText(rect(), Qt::AlignCenter, "Qt"); + painter.restore(); // don't forget to restore previous painter state + } + painter.drawLine(line); +} +//! [0] + +//! [1] +void MyGuardWidget::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.setPen(Qt::red); + if (drawText) { + QPainterStateGuard guard(&painter) + painter.setPen(Qt::blue); + painter.setFont(QFont("Arial", 30)); + painter.drawText(rect(), Qt::AlignCenter, "Qt"); + } + painter.drawLine(line); +} +//! [1] + +} // src_gui_painting_qpainterstateguard -- cgit v1.2.3