summaryrefslogtreecommitdiffstats
path: root/src/gui/doc/snippets
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2023-12-19 09:41:01 +0100
committerChristian Ehrlicher <ch.ehrlicher@gmx.de>2024-11-28 10:43:42 +0200
commit9ecf47a8a8d11227ecf192246d7df7c2c4dc9105 (patch)
treeed5a0d454fa9ddedf2beee0dc0bbd4d49ec4970d /src/gui/doc/snippets
parentb2f471e18d818253cd93e9c73fec115fa31e3a80 (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')
-rw-r--r--src/gui/doc/snippets/code/src_gui_painting_qpainterstateguard.cpp54
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