Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qgraphicsitem_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QGRAPHICSITEM_P_H
5#define QGRAPHICSITEM_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of other Qt classes. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include "qgraphicsitem.h"
20#include "qset.h"
21#include "qpixmapcache.h"
22#include <private/qgraphicsview_p.h>
23#include "qgraphicstransform.h"
24#include <private/qgraphicstransform_p.h>
25
26#include <QtCore/qpoint.h>
27
28QT_REQUIRE_CONFIG(graphicsview);
29
31
33
35{
36public:
38
39 // ItemCoordinateCache only
43
44 // DeviceCoordinateCache only
51 QHash<QPaintDevice *, DeviceData> deviceData;
52
53 // List of logical exposed rects
54 QList<QRectF> exposed;
56
57 // Empty cache
58 void purge();
59};
60
61class Q_WIDGETS_EXPORT QGraphicsItemPrivate
62{
63 Q_DECLARE_PUBLIC(QGraphicsItem)
64public:
72
74 NoFlag = 0,
75 AncestorHandlesChildEvents = 0x1,
76 AncestorClipsChildren = 0x2,
77 AncestorIgnoresTransformations = 0x4,
78 AncestorFiltersChildEvents = 0x8,
79 AncestorContainsChildren = 0x10
80 };
81
83 virtual ~QGraphicsItemPrivate();
84
86 {
87 return item->d_ptr.data();
88 }
90 {
91 return item->d_ptr.data();
92 }
93
94 void updateChildWithGraphicsEffectFlagRecursively();
95 void updateAncestorFlag(QGraphicsItem::GraphicsItemFlag childFlag,
96 AncestorFlag flag = NoFlag, bool enabled = false, bool root = true);
97 void updateAncestorFlags();
98 void setIsMemberOfGroup(bool enabled);
99 void remapItemPos(QEvent *event, QGraphicsItem *item);
100 QTransform genericMapFromSceneTransform(const QWidget *viewport = nullptr) const;
101 QPointF genericMapFromScene(const QPointF &pos, const QWidget *viewport) const;
102 inline bool itemIsUntransformable() const
103 {
105 || (ancestorFlags & AncestorIgnoresTransformations);
106 }
107
108 void combineTransformToParent(QTransform *x, const QTransform *viewTransform = nullptr) const;
109 void combineTransformFromParent(QTransform *x, const QTransform *viewTransform = nullptr) const;
110 virtual void updateSceneTransformFromParent();
111
112 static bool movableAncestorIsSelected(const QGraphicsItem *item);
113
114 virtual void setPosHelper(const QPointF &pos);
115 void setTransformHelper(const QTransform &transform);
116 void prependGraphicsTransform(QGraphicsTransform *t);
117 void appendGraphicsTransform(QGraphicsTransform *t);
118 void setVisibleHelper(bool newVisible, bool explicitly, bool update = true,
119 bool hiddenByPanel = false);
120 void setEnabledHelper(bool newEnabled, bool explicitly, bool update = true);
121 bool discardUpdateRequest(bool ignoreVisibleBit = false,
122 bool ignoreDirtyBit = false, bool ignoreOpacity = false) const;
123 virtual void transformChanged() {}
124 int depth() const;
125#if QT_CONFIG(graphicseffect)
126 enum InvalidateReason {
127 OpacityChanged
128 };
129 void invalidateParentGraphicsEffectsRecursively();
130 void invalidateChildGraphicsEffectsRecursively(InvalidateReason reason);
131#endif // QT_CONFIG(graphicseffect)
132 void invalidateDepthRecursively();
133 void resolveDepth();
134 void addChild(QGraphicsItem *child);
135 void removeChild(QGraphicsItem *child);
136 void setParentItemHelper(QGraphicsItem *parent, const QVariant *newParentVariant,
137 const QVariant *thisPointerVariant);
138 void childrenBoundingRectHelper(QTransform *x, QRectF *rect, QGraphicsItem *topMostEffectItem);
139 void initStyleOption(QStyleOptionGraphicsItem *option, const QTransform &worldTransform,
140 const QRegion &exposedRegion, bool allItems = false) const;
141 QRectF effectiveBoundingRect(QGraphicsItem *topMostEffectItem = nullptr) const;
142 QRectF sceneEffectiveBoundingRect() const;
143
144 QRectF effectiveBoundingRect(const QRectF &rect) const;
145
146 virtual void resolveFont(uint inheritedMask)
147 {
148 for (int i = 0; i < children.size(); ++i)
149 children.at(i)->d_ptr->resolveFont(inheritedMask);
150 }
151
152 virtual void resolvePalette(uint inheritedMask)
153 {
154 for (int i = 0; i < children.size(); ++i)
155 children.at(i)->d_ptr->resolvePalette(inheritedMask);
156 }
157
158 virtual bool isProxyWidget() const;
159
160 inline QVariant extra(Extra type) const
161 {
162 for (int i = 0; i < extras.size(); ++i) {
163 const ExtraStruct &extra = extras.at(i);
164 if (extra.type == type)
165 return extra.value;
166 }
167 return QVariant();
168 }
169
170 inline void setExtra(Extra type, const QVariant &value)
171 {
172 int index = -1;
173 for (int i = 0; i < extras.size(); ++i) {
174 if (extras.at(i).type == type) {
175 index = i;
176 break;
177 }
178 }
179
180 if (index == -1) {
181 extras << ExtraStruct(type, value);
182 } else {
183 extras[index].value = value;
184 }
185 }
186
187 inline void unsetExtra(Extra type)
188 {
189 for (int i = 0; i < extras.size(); ++i) {
190 if (extras.at(i).type == type) {
191 extras.removeAt(i);
192 return;
193 }
194 }
195 }
196
197 struct ExtraStruct {
198 ExtraStruct() { } // for QList, don't use
202
205
206 bool operator<(Extra extra) const
207 { return type < extra; }
208 };
209
210 QList<ExtraStruct> extras;
211
212 QGraphicsItemCache *maybeExtraItemCache() const;
213 QGraphicsItemCache *extraItemCache() const;
214 void removeExtraItemCache();
215
216 void updatePaintedViewBoundingRects(bool updateChildren);
217 void ensureSceneTransformRecursive(QGraphicsItem **topMostDirtyItem);
219 {
220 QGraphicsItem *that = q_func();
221 ensureSceneTransformRecursive(&that);
222 }
223
225 {
226 ensureSceneTransform();
227 return sceneTransformTranslateOnly;
228 }
229
231 {
232 for (int i = 0; i < children.size(); ++i)
233 children.at(i)->d_ptr->dirtySceneTransform = 1;
234 }
235
237 {
238 qreal o = opacity;
239 QGraphicsItem *p = parent;
240 int myFlags = flags;
241 while (p) {
242 int parentFlags = p->d_ptr->flags;
243
244 // If I have a parent, and I don't ignore my parent's opacity, and my
245 // parent propagates to me, then combine my local opacity with my parent's
246 // effective opacity into my effective opacity.
249 break;
250 }
251
252 o *= p->d_ptr->opacity;
253 p = p->d_ptr->parent;
254 myFlags = parentFlags;
255 }
256 return o;
257 }
258
259 inline bool isOpacityNull() const
260 { return (opacity < qreal(0.001)); }
261
262 static inline bool isOpacityNull(qreal opacity)
263 { return (opacity < qreal(0.001)); }
264
265 inline bool isFullyTransparent() const
266 {
267 if (isOpacityNull())
268 return true;
269 if (!parent)
270 return false;
271
272 return isOpacityNull(calcEffectiveOpacity());
273 }
274
275 inline qreal effectiveOpacity() const {
276 if (!parent || !opacity)
277 return opacity;
278
279 return calcEffectiveOpacity();
280 }
281
282 inline qreal combineOpacityFromParent(qreal parentOpacity) const
283 {
285 && !(parent->d_ptr->flags & QGraphicsItem::ItemDoesntPropagateOpacityToChildren)) {
286 return parentOpacity * opacity;
287 }
288 return opacity;
289 }
290
291 inline bool childrenCombineOpacity() const
292 {
293 if (!children.size())
294 return true;
296 return false;
297
298 for (int i = 0; i < children.size(); ++i) {
299 if (children.at(i)->d_ptr->flags & QGraphicsItem::ItemIgnoresParentOpacity)
300 return false;
301 }
302 return true;
303 }
304
305 inline bool childrenClippedToShape() const
306 { return (flags & QGraphicsItem::ItemClipsChildrenToShape) || children.isEmpty(); }
307
308 inline bool isInvisible() const
309 {
310 return !visible || (childrenCombineOpacity() && isFullyTransparent());
311 }
312
313 inline void markParentDirty(bool updateBoundingRect = false);
314
315 void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromHide);
316 void clearFocusHelper(bool giveFocusToParent, bool hiddenByParentPanel);
317 void setSubFocus(QGraphicsItem *rootItem = nullptr, QGraphicsItem *stopItem = nullptr);
318 void clearSubFocus(QGraphicsItem *rootItem = nullptr, QGraphicsItem *stopItem = nullptr);
319 void resetFocusProxy();
320 virtual void subFocusItemChange();
321 virtual void focusScopeItemChange(bool isSubFocusItem);
322
323 inline QTransform transformToParent() const;
324 inline void ensureSortedChildren();
325 static inline bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b);
326 void ensureSequentialSiblingIndex();
327 inline void sendScenePosChange();
328 virtual void siblingOrderChange();
329
330 // Private Properties
331 virtual qreal width() const;
332 virtual void setWidth(qreal);
333 virtual void resetWidth();
334
335 virtual qreal height() const;
336 virtual void setHeight(qreal);
337 virtual void resetHeight();
338
341 QHash<QWidget *, QRect> paintedViewBoundingRects;
347 QList<QGraphicsItem *> children;
348 struct TransformData;
352 int index;
354 int itemDepth; // Lazily calculated when calling depth().
356 QList<QGraphicsItem **> focusProxyRefs;
359 Qt::InputMethodHints imHints;
361#ifndef QT_NO_GESTURES
362 QMap<Qt::GestureType, Qt::GestureFlags> gestureContext;
363#endif
364
365 // Packed 32 bits
389
390 // Packed 32 bits
404#ifdef Q_OS_WASM
405 unsigned char :0; //this aligns 64bit field for wasm see QTBUG-65259
406#endif
407 // New 32 bits
421
422 // Optional stacking order
425};
427
429{
435 QList<QGraphicsTransform *> graphicsTransforms;
437
439 scale(1.0), rotation(0.0),
440 xOrigin(0.0), yOrigin(0.0),
441 onlyTransform(true)
442 { }
443
444 QTransform computedFullTransform(QTransform *postmultiplyTransform = nullptr) const
445 {
446 if (onlyTransform) {
447 if (!postmultiplyTransform || postmultiplyTransform->isIdentity())
448 return transform;
449 if (transform.isIdentity())
450 return *postmultiplyTransform;
451 return transform * *postmultiplyTransform;
452 }
453
457 for (int i = 0; i < graphicsTransforms.size(); ++i)
459 x *= m.toTransform();
460 }
461 x.translate(xOrigin, yOrigin);
462 x.rotate(rotation);
463 x.scale(scale, scale);
464 x.translate(-xOrigin, -yOrigin);
465 if (postmultiplyTransform)
466 x *= *postmultiplyTransform;
467 return x;
468 }
469};
470
492
493#if QT_CONFIG(graphicseffect)
494class QGraphicsItemEffectSourcePrivate : public QGraphicsEffectSourcePrivate
495{
496public:
497 QGraphicsItemEffectSourcePrivate(QGraphicsItem *i)
499 {}
500
501 void detach() override
502 {
503 item->d_ptr->graphicsEffect = nullptr;
505 }
506
507 const QGraphicsItem *graphicsItem() const override
508 { return item; }
509
510 const QWidget *widget() const override
511 { return nullptr; }
512
513 void update() override {
515 item->update();
517 }
518
519 void effectBoundingRectChanged() override
521
522 bool isPixmap() const override
523 {
526 && item->d_ptr->children.size() == 0;
527 }
528
529 const QStyleOption *styleOption() const override
530 { return info ? info->option : nullptr; }
531
532 QRect deviceRect() const override
533 {
534 if (!info || !info->widget) {
535 qWarning("QGraphicsEffectSource::deviceRect: Not yet implemented, lacking device context");
536 return QRect();
537 }
538 return info->widget->rect();
539 }
540
541 QRectF boundingRect(Qt::CoordinateSystem system) const override;
542 void draw(QPainter *) override;
544 QPoint *offset,
545 QGraphicsEffect::PixmapPadMode mode) const override;
546 QRectF paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = nullptr) const;
547
550 QTransform lastEffectTransform;
551};
552#endif // QT_CONFIG(graphicseffect)
553
560inline bool qt_closestItemFirst(const QGraphicsItem *item1, const QGraphicsItem *item2)
561{
562 // Siblings? Just check their z-values.
563 const QGraphicsItemPrivate *d1 = item1->d_ptr.data();
564 const QGraphicsItemPrivate *d2 = item2->d_ptr.data();
565 if (d1->parent == d2->parent)
566 return qt_closestLeaf(item1, item2);
567
568 // Find common ancestor, and each item's ancestor closest to the common
569 // ancestor.
570 int item1Depth = d1->depth();
571 int item2Depth = d2->depth();
572 const QGraphicsItem *p = item1;
573 const QGraphicsItem *t1 = item1;
574 while (item1Depth > item2Depth && (p = p->d_ptr->parent)) {
575 if (p == item2) {
576 // item2 is one of item1's ancestors; item1 is on top
577 return !(t1->d_ptr->flags & QGraphicsItem::ItemStacksBehindParent);
578 }
579 t1 = p;
580 --item1Depth;
581 }
582 p = item2;
583 const QGraphicsItem *t2 = item2;
584 while (item2Depth > item1Depth && (p = p->d_ptr->parent)) {
585 if (p == item1) {
586 // item1 is one of item2's ancestors; item1 is not on top
587 return (t2->d_ptr->flags & QGraphicsItem::ItemStacksBehindParent);
588 }
589 t2 = p;
590 --item2Depth;
591 }
592
593 // item1Ancestor is now at the same level as item2Ancestor, but not the same.
594 const QGraphicsItem *p1 = t1;
595 const QGraphicsItem *p2 = t2;
596 while (t1 && t1 != t2) {
597 p1 = t1;
598 p2 = t2;
599 t1 = t1->d_ptr->parent;
600 t2 = t2->d_ptr->parent;
601 }
602
603 // in case we have a common ancestor, we compare the immediate children in the ancestor's path.
604 // otherwise we compare the respective items' topLevelItems directly.
605 return qt_closestLeaf(p1, p2);
606}
607
614inline bool qt_closestItemLast(const QGraphicsItem *item1, const QGraphicsItem *item2)
615{
616 return qt_closestItemFirst(item2, item1);
617}
618
622inline bool qt_closestLeaf(const QGraphicsItem *item1, const QGraphicsItem *item2)
623{
624 // Return true if sibling item1 is on top of item2.
625 const QGraphicsItemPrivate *d1 = item1->d_ptr.data();
626 const QGraphicsItemPrivate *d2 = item2->d_ptr.data();
627 bool f1 = d1->flags & QGraphicsItem::ItemStacksBehindParent;
628 bool f2 = d2->flags & QGraphicsItem::ItemStacksBehindParent;
629 if (f1 != f2)
630 return f2;
631 if (d1->z != d2->z)
632 return d1->z > d2->z;
633 return d1->siblingIndex > d2->siblingIndex;
634}
635
639inline bool qt_notclosestLeaf(const QGraphicsItem *item1, const QGraphicsItem *item2)
640{ return qt_closestLeaf(item2, item1); }
641
642/*
643 return the full transform of the item to the parent. This include the position and all the transform data
644*/
651
656{
657 if (needSortChildren) {
660 if (children.isEmpty())
661 return;
663 for (int i = 0; i < children.size(); ++i) {
664 if (children.at(i)->d_ptr->siblingIndex != i) {
666 break;
667 }
668 }
669 }
670}
671
676{
677 return a->d_ptr->siblingIndex < b->d_ptr->siblingIndex;
678}
679
683inline void QGraphicsItemPrivate::markParentDirty(bool updateBoundingRect)
684{
685 QGraphicsItemPrivate *parentp = this;
686#if QT_CONFIG(graphicseffect)
687 if (updateBoundingRect && parentp->graphicsEffect && !parentp->inSetPosHelper) {
688 parentp->notifyInvalidated = 1;
689 static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()
690 ->source->d_func())->invalidateCache();
691 }
692#endif
693 while (parentp->parent) {
694 parentp = parentp->parent->d_ptr.data();
695 parentp->dirtyChildren = 1;
696
697 if (updateBoundingRect) {
698 parentp->dirtyChildrenBoundingRect = 1;
699 // ### Only do this if the parent's effect applies to the entire subtree.
700 parentp->notifyBoundingRectChanged = 1;
701 }
702#if QT_CONFIG(graphicseffect)
703 if (parentp->graphicsEffect) {
704 if (updateBoundingRect) {
705 static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()
706 ->source->d_func())->invalidateCache();
707 parentp->notifyInvalidated = 1;
708 }
709 if (parentp->scene && parentp->graphicsEffect->isEnabled()) {
710 parentp->dirty = 1;
711 parentp->fullUpdatePending = 1;
712 }
713 }
714#endif
715 }
716}
717
719
720#endif
\inmodule QtCore
Definition qcoreevent.h:45
virtual const QGraphicsItem * graphicsItem() const =0
virtual bool isPixmap() const =0
virtual QRectF boundingRect(Qt::CoordinateSystem system) const =0
virtual const QStyleOption * styleOption() const =0
virtual void draw(QPainter *p)=0
virtual QRect deviceRect() const =0
virtual void effectBoundingRectChanged()=0
virtual const QWidget * widget() const =0
The QGraphicsEffect class is the base class for all graphics effects.
PixmapPadMode
This enum describes how the pixmap returned from sourcePixmap should be padded.
QList< QRectF > exposed
QPixmapCache::Key key
QHash< QPaintDevice *, DeviceData > deviceData
QGraphicsItem * subFocusItem
void invalidateChildrenSceneTransform()
QVariant extra(Extra type) const
QGraphicsScene * scene
static bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b)
Qt::InputMethodHints imHints
QList< QGraphicsItem ** > focusProxyRefs
QTransform transformToParent() const
QGraphicsEffect * graphicsEffect
QGraphicsItem * focusProxy
void markParentDirty(bool updateBoundingRect=false)
QGraphicsItem * focusScopeItem
void combineTransformToParent(QTransform *x, const QTransform *viewTransform=nullptr) const
QMap< Qt::GestureType, Qt::GestureFlags > gestureContext
bool itemIsUntransformable() const
QList< ExtraStruct > extras
quint32 mayHaveChildWithGraphicsEffect
static QGraphicsItemPrivate * get(QGraphicsItem *item)
void setExtra(Extra type, const QVariant &value)
QGraphicsItem::PanelModality panelModality
virtual void transformChanged()
bool childrenCombineOpacity() const
QList< QGraphicsItem * > children
bool isFullyTransparent() const
bool childrenClippedToShape() const
quint32 paintedViewBoundingRectsNeedRepaint
QGraphicsItem * parent
virtual void resolvePalette(uint inheritedMask)
qreal effectiveOpacity() const
QGraphicsItem * q_ptr
TransformData * transformData
static const QGraphicsItemPrivate * get(const QGraphicsItem *item)
QHash< QWidget *, QRect > paintedViewBoundingRects
virtual void resolveFont(uint inheritedMask)
qreal combineOpacityFromParent(qreal parentOpacity) const
void unsetExtra(Extra type)
qreal calcEffectiveOpacity() const
static bool isOpacityNull(qreal opacity)
The QGraphicsItem class is the base class for all graphical items in a QGraphicsScene.
QScopedPointer< QGraphicsItemPrivate > d_ptr
void update(const QRectF &rect=QRectF())
Schedules a redraw of the area covered by rect in this item.
GraphicsItemFlag
This enum describes different flags that you can set on an item to toggle different features in the i...
@ ItemDoesntPropagateOpacityToChildren
void prepareGeometryChange()
Prepares the item for a geometry change.
virtual int type() const
Returns the type of an item as an int.
GraphicsItemFlags flags() const
Returns this item's flags.
The QGraphicsScene class provides a surface for managing a large number of 2D graphical items.
The QGraphicsTransform class is an abstract base class for building advanced transformations on QGrap...
virtual void applyTo(QMatrix4x4 *matrix) const =0
This pure virtual method has to be reimplemented in derived classes.
qsizetype size() const noexcept
Definition qlist.h:397
bool isEmpty() const noexcept
Definition qlist.h:401
iterator end()
Definition qlist.h:626
const_reference at(qsizetype i) const noexcept
Definition qlist.h:446
iterator begin()
Definition qlist.h:625
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition qmatrix4x4.h:25
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
The QPixmapCache::Key class can be used for efficient access to the QPixmapCache.
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
Definition qpixmap.h:27
\inmodule QtCore\reentrant
Definition qpoint.h:217
\inmodule QtCore\reentrant
Definition qpoint.h:25
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore\reentrant
Definition qrect.h:30
The QRegion class specifies a clip region for a painter.
Definition qregion.h:27
T * data() const noexcept
Returns the value of the pointer referenced by this object.
\inmodule QtCore
Definition qsize.h:25
The QStyleOptionGraphicsItem class is used to describe the parameters needed to draw a QGraphicsItem.
The QStyleOption class stores the parameters used by QStyle functions.
The QTransform class specifies 2D transformations of a coordinate system.
Definition qtransform.h:20
\inmodule QtCore
Definition qvariant.h:65
The QWidget class is the base class of all user interface objects.
Definition qwidget.h:99
QPixmap p2
QPixmap p1
[0]
rect
[4]
QStyleOptionButton opt
Combined button and popup list for selecting options.
CoordinateSystem
FocusReason
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
bool qt_closestItemLast(const QGraphicsItem *item1, const QGraphicsItem *item2)
Returns true if item2 is on top of item1.
bool qt_closestLeaf(const QGraphicsItem *item1, const QGraphicsItem *item2)
bool qt_notclosestLeaf(const QGraphicsItem *item1, const QGraphicsItem *item2)
bool qt_closestItemFirst(const QGraphicsItem *item1, const QGraphicsItem *item2)
Returns true if item1 is on top of item2.
#define qWarning
Definition qlogging.h:166
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLint GLenum GLsizei GLsizei GLsizei depth
GLenum mode
const GLfloat * m
GLfloat GLfloat GLfloat w
[0]
GLint GLsizei GLsizei height
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint index
[2]
GLboolean r
[2]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
[4]
GLint GLsizei width
GLenum type
GLbitfield flags
GLenum GLuint GLintptr offset
struct _cl_event * event
GLuint GLenum GLenum transform
GLuint GLenum matrix
GLdouble GLdouble t
Definition qopenglext.h:243
GLfloat GLfloat p
[1]
GLuint GLenum option
GLenum GLenum GLenum GLenum GLenum scale
const QQuickItem * rootItem(const I &item)
#define t2
#define t1
#define QT_REQUIRE_CONFIG(feature)
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
unsigned int quint32
Definition qtypes.h:50
unsigned int uint
Definition qtypes.h:34
double qreal
Definition qtypes.h:187
QDate d1(1995, 5, 17)
[0]
QDate d2(1995, 5, 20)
QGraphicsItem * item
view viewport() -> scroll(dx, dy, deviceRect)
QLayoutItem * child
[0]
widget render & pixmap
QHostInfo info
[0]
const QTransform * transformPtr
const QTransform * effectTransform
QGraphicsItemPaintInfo(const QTransform *const xform1, const QTransform *const xform2, const QTransform *const xform3, QRegion *r, QWidget *w, QStyleOptionGraphicsItem *opt, QPainter *p, qreal o, bool b1, bool b2)
QStyleOptionGraphicsItem * option
const QTransform * viewTransform
ExtraStruct(Extra type, const QVariant &value)
bool operator<(Extra extra) const
QTransform computedFullTransform(QTransform *postmultiplyTransform=nullptr) const
QList< QGraphicsTransform * > graphicsTransforms