Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
src_gui_painting_qpainter.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3#include <QOpenGLFunctions>
4#include <QPaintEvent>
5#include <QPainter>
6#include <QPainterPath>
7#include <QPicture>
8#include <QRectF>
9#include <QWidget>
10
11
14 void paintEvent(QPaintEvent *);
16};
17struct MyWidget : public QWidget
18{
19 void paintEvent(QPaintEvent *);
20};
22
23
24//! [0]
25void SimpleExampleWidget::paintEvent(QPaintEvent *)
26{
27 QPainter painter(this);
28 painter.setPen(Qt::blue);
29 painter.setFont(QFont("Arial", 30));
30 painter.drawText(rect(), Qt::AlignCenter, "Qt");
31}
32//! [0]
33
34
35//! [1]
36void MyWidget::paintEvent(QPaintEvent *)
37{
38 QPainter p;
39 p.begin(this);
40 p.drawLine(drawingCode); // drawing code
41 p.end();
42}
43//! [1]
44
45} // src_gui_painting_qpainter
47struct MyWidget : public QWidget
48{
49 void paintEvent(QPaintEvent *);
50 int background() { return 0; }
51 void wrapper1();
52 void wrapper2();
53 void wrapper3();
54 void wrapper4();
55 void wrapper5();
56 void wrapper6();
57 void wrapper7();
58 void wrapper8();
59 void wrapper9();
60 void wrapper10();
61 void wrapper11();
62 void wrapper12();
63 void wrapper13();
64 void wrapper14();
65 void wrapper15();
67};
69
70//! [2]
71void MyWidget::paintEvent(QPaintEvent *)
72{
73 QPainter p(this);
74 p.drawLine(drawingCode); // drawing code
75}
76//! [2]
77
78
80{
81 QPainter *painter = nullptr;
82 QPainter *painter2 = nullptr;
83 QPaintDevice *myWidget = nullptr;
84 //! [3]
85 painter->begin(nullptr); // impossible - paint device cannot be null
86
87 QPixmap image(0, 0);
88 painter->begin(&image); // impossible - image.isNull() == true;
89
90 painter->begin(myWidget);
91 painter2->begin(myWidget); // impossible - only one painter at a time
92 //! [3]
93} // wrapper0
94
96{
97 struct QPainter {
98 void rotate(qreal angle);
99 void setWorldTransform(QTransform matrix, bool);
100 };
101} // QPainterWrapper
102
104{
105 {
106 //! [5]
107 QPainterPath path;
108 path.moveTo(20, 80);
109 path.lineTo(20, 30);
110 path.cubicTo(80, 0, 50, 50, 80, 80);
111
112 QPainter painter(this);
113 painter.drawPath(path);
114 //! [5]
115 }
116
117 {
118 //! [6]
119 QLineF line(10.0, 80.0, 90.0, 20.0);
120
121 QPainter painter(this);
122 painter.drawLine(line);
123 //! [6]
124 }
125} // MyWidget::wrapper1()
126
127
129{
130 //! [7]
131 QRectF rectangle(10.0, 20.0, 80.0, 60.0);
132
133 QPainter painter(this);
134 painter.drawRect(rectangle);
135 //! [7]
136} // MyWidget::wrapper2
137
138
140{
141 //! [8]
142 QRectF rectangle(10.0, 20.0, 80.0, 60.0);
143
144 QPainter painter(this);
145 painter.drawRoundedRect(rectangle, 20.0, 15.0);
146 //! [8]
147} // MyWidget::wrapper3
148
149
151{
152 //! [9]
153 QRectF rectangle(10.0, 20.0, 80.0, 60.0);
154
155 QPainter painter(this);
156 painter.drawEllipse(rectangle);
157 //! [9]
158} // MyWidget::wrapper4
159
160
162{
163 //! [10]
164 QRectF rectangle(10.0, 20.0, 80.0, 60.0);
165 int startAngle = 30 * 16;
166 int spanAngle = 120 * 16;
167
168 QPainter painter(this);
169 painter.drawArc(rectangle, startAngle, spanAngle);
170 //! [10]
171} // MyWidget::wrapper5
172
173
175{
176 //! [11]
177 QRectF rectangle(10.0, 20.0, 80.0, 60.0);
178 int startAngle = 30 * 16;
179 int spanAngle = 120 * 16;
180
181 QPainter painter(this);
182 painter.drawPie(rectangle, startAngle, spanAngle);
183 //! [11]
184} // MyWidget::wrapper6
185
186
188QRect rect;
189
190//! [12]
191QRectF rectangle(10.0, 20.0, 80.0, 60.0);
192int startAngle = 30 * 16;
193int spanAngle = 120 * 16;
194
195QPainter painter(this);
196painter.drawChord(rect, startAngle, spanAngle);
197//! [12]
198Q_UNUSED(rectangle);
199} // MyWidget::wrapper7
200
201
203{
204 //! [13]
205 static const QPointF points[3] = {
206 QPointF(10.0, 80.0),
207 QPointF(20.0, 10.0),
208 QPointF(80.0, 30.0),
209 };
210
211 QPainter painter(this);
212 painter.drawPolyline(points, 3);
213 //! [13]
214} // MyWidget::wrapper8
215
216
218{
219 //! [14]
220 static const QPointF points[4] = {
221 QPointF(10.0, 80.0),
222 QPointF(20.0, 10.0),
223 QPointF(80.0, 30.0),
224 QPointF(90.0, 70.0)
225 };
226
227 QPainter painter(this);
228 painter.drawPolygon(points, 4);
229 //! [14]
230} // MyWidget::wrapper9
231
232
234{
235 {
236 //! [15]
237 static const QPointF points[4] = {
238 QPointF(10.0, 80.0),
239 QPointF(20.0, 10.0),
240 QPointF(80.0, 30.0),
241 QPointF(90.0, 70.0)
242 };
243
244 QPainter painter(this);
245 painter.drawConvexPolygon(points, 4);
246 //! [15]
247 }
248
249 {
250 //! [16]
251 QRectF target(10.0, 20.0, 80.0, 60.0);
252 QRectF source(0.0, 0.0, 70.0, 40.0);
253 QPixmap pixmap(":myPixmap.png");
254
255 QPainter painter(this);
256 painter.drawPixmap(target, pixmap, source);
257 //! [16]
258 }
259} // MyWidget::wrapper10
260
261
263{
264 QRect rect;
265
266 //! [17]
267 QPainter painter(this);
268 painter.drawText(rect, Qt::AlignCenter, tr("Qt\nProject"));
269 //! [17]
270} // MyWidget::wrapper11
271
272
273QRectF fillRect(QRect rect, int background) {
274 Q_UNUSED(rect);
275 Q_UNUSED(background);
276 return QRectF();
277};
278
280{
281 QRect rectangle;
282
283 //! [18]
284 QPicture picture;
285 QPointF point(10.0, 20.0);
286 picture.load("drawing.pic");
287
288 QPainter painter(this);
289 painter.drawPicture(0, 0, picture);
290 //! [18]
291
292 Q_UNUSED(point);
293
294
295 //! [19]
296 fillRect(rectangle, background());
297 //! [19]
298} // MyWidget::wrapper12
299
300
302{
303 //! [20]
304 QRectF target(10.0, 20.0, 80.0, 60.0);
305 QRectF source(0.0, 0.0, 70.0, 40.0);
306 QImage image(":/images/myImage.png");
307
308 QPainter painter(this);
309 painter.drawImage(target, image, source);
310 //! [20]
311} // MyWidget::wrapper13
312
313
315{
316 //! [21]
317 QPainter painter(this);
318 painter.fillRect(0, 0, 128, 128, Qt::green);
319 painter.beginNativePainting();
320
321 glEnable(GL_SCISSOR_TEST);
322 glScissor(0, 0, 64, 64);
323
324 glClearColor(1, 0, 0, 1);
325 glClear(GL_COLOR_BUFFER_BIT);
326
327 glDisable(GL_SCISSOR_TEST);
328
329 painter.endNativePainting();
330 //! [21]
331} // MyWidget::wrapper14
332
333
335{
336 //! [drawText]
337 QPainter painter(this);
338 QFont font = painter.font();
339 font.setPixelSize(48);
340 painter.setFont(font);
341
342 const QRect rectangle = QRect(0, 0, 100, 50);
343 QRect boundingRect;
344 painter.drawText(rectangle, 0, tr("Hello"), &boundingRect);
345
346 QPen pen = painter.pen();
347 pen.setStyle(Qt::DotLine);
348 painter.setPen(pen);
349 painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));
350
351 pen.setStyle(Qt::DashLine);
352 painter.setPen(pen);
353 painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));
354 //! [drawText]
355} // MyWidget::wrapper15
356
358{
359 //! [renderHint]
360 QPainter painter(this);
361 painter.setRenderHint(QPainter::Antialiasing, true);
362 //! [renderHint]
363 int diameter = 50;
364 //! [floatBased]
365 painter.drawEllipse(QRectF(-diameter / 2.0, -diameter / 2.0, diameter, diameter));
366 //! [floatBased]
367 //! [intBased]
368 painter.drawEllipse(QRect(-diameter / 2, -diameter / 2, diameter, diameter));
369 //! [intBased]
370
371} // MyWidget::concentricCircles
372
373} // src_gui_painting_qpainter2
QRectF fillRect(QRect rect, int background)