diff options
| author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2023-12-19 09:41:01 +0100 |
|---|---|---|
| committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2024-11-28 10:43:42 +0200 |
| commit | 9ecf47a8a8d11227ecf192246d7df7c2c4dc9105 (patch) | |
| tree | ed5a0d454fa9ddedf2beee0dc0bbd4d49ec4970d /src/gui/doc/snippets/code | |
| parent | b2f471e18d818253cd93e9c73fec115fa31e3a80 (diff) | |
Add QPainterStateGuard
Add QPainterStateGuard as a small RAII helper class to avoid unbalanced
QPainter::save()/restore() calls.
Change-Id: I618a5d720b7bc9267a0fbac7dcc90e61f5d9cefd
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'src/gui/doc/snippets/code')
| -rw-r--r-- | src/gui/doc/snippets/code/src_gui_painting_qpainterstateguard.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
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 <ch.ehrlicher@gmx.de> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#include <QPaintEvent> +#include <QPainter> +#include <QPainterStateGuard> +#include <QWidget> + + +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 |
