OpenCoverage

qgraphicslayoutitem.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/graphicsview/qgraphicslayoutitem.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 The Qt Company Ltd.-
4** Contact: https://www.qt.io/licensing/-
5**-
6** This file is part of the QtWidgets module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see https://www.qt.io/terms-conditions. For further-
15** information use the contact form at https://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 3 as published by the Free Software-
20** Foundation and appearing in the file LICENSE.LGPL3 included in the-
21** packaging of this file. Please review the following information to-
22** ensure the GNU Lesser General Public License version 3 requirements-
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
24**-
25** GNU General Public License Usage-
26** Alternatively, this file may be used under the terms of the GNU-
27** General Public License version 2.0 or (at your option) the GNU General-
28** Public license version 3 or any later version approved by the KDE Free-
29** Qt Foundation. The licenses are as published by the Free Software-
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
31** included in the packaging of this file. Please review the following-
32** information to ensure the GNU General Public License requirements will-
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
34** https://www.gnu.org/licenses/gpl-3.0.html.-
35**-
36** $QT_END_LICENSE$-
37**-
38****************************************************************************/-
39-
40#include "qglobal.h"-
41-
42#ifndef QT_NO_GRAPHICSVIEW-
43-
44#include "qgraphicslayout.h"-
45#include "qgraphicsscene.h"-
46#include "qgraphicslayoutitem.h"-
47#include "qgraphicslayoutitem_p.h"-
48#include "qwidget.h"-
49#include "qgraphicswidget.h"-
50-
51#include <QtDebug>-
52-
53QT_BEGIN_NAMESPACE-
54-
55/*-
56 COMBINE_SIZE() is identical to combineSize(), except that it-
57 doesn't evaluate 'size' unless necessary.-
58*/-
59#define COMBINE_SIZE(result, size) \-
60 do { \-
61 if ((result).width() < 0 || (result).height() < 0) \-
62 combineSize((result), (size)); \-
63 } while (false)-
64-
65static void combineSize(QSizeF &result, const QSizeF &size)-
66{-
67 if (result.width() < 0)
result.width() < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
68 result.setWidth(size.width());
never executed: result.setWidth(size.width());
0
69 if (result.height() < 0)
result.height() < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
70 result.setHeight(size.height());
never executed: result.setHeight(size.height());
0
71}
never executed: end of block
0
72-
73static void boundSize(QSizeF &result, const QSizeF &size)-
74{-
75 if (size.width() >= 0 && size.width() < result.width())
size.width() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
size.width() < result.width()Description
TRUEnever evaluated
FALSEnever evaluated
0
76 result.setWidth(size.width());
never executed: result.setWidth(size.width());
0
77 if (size.height() >= 0 && size.height() < result.height())
size.height() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
size.height() ...esult.height()Description
TRUEnever evaluated
FALSEnever evaluated
0
78 result.setHeight(size.height());
never executed: result.setHeight(size.height());
0
79}
never executed: end of block
0
80-
81static void expandSize(QSizeF &result, const QSizeF &size)-
82{-
83 if (size.width() >= 0 && size.width() > result.width())
size.width() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
size.width() > result.width()Description
TRUEnever evaluated
FALSEnever evaluated
0
84 result.setWidth(size.width());
never executed: result.setWidth(size.width());
0
85 if (size.height() >= 0 && size.height() > result.height())
size.height() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
size.height() ...esult.height()Description
TRUEnever evaluated
FALSEnever evaluated
0
86 result.setHeight(size.height());
never executed: result.setHeight(size.height());
0
87}
never executed: end of block
0
88-
89static void normalizeHints(qreal &minimum, qreal &preferred, qreal &maximum, qreal &descent)-
90{-
91 if (minimum >= 0 && maximum >= 0 && minimum > maximum)
minimum >= 0Description
TRUEnever evaluated
FALSEnever evaluated
maximum >= 0Description
TRUEnever evaluated
FALSEnever evaluated
minimum > maximumDescription
TRUEnever evaluated
FALSEnever evaluated
0
92 minimum = maximum;
never executed: minimum = maximum;
0
93-
94 if (preferred >= 0) {
preferred >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
95 if (minimum >= 0 && preferred < minimum) {
minimum >= 0Description
TRUEnever evaluated
FALSEnever evaluated
preferred < minimumDescription
TRUEnever evaluated
FALSEnever evaluated
0
96 preferred = minimum;-
97 } else if (maximum >= 0 && preferred > maximum) {
never executed: end of block
maximum >= 0Description
TRUEnever evaluated
FALSEnever evaluated
preferred > maximumDescription
TRUEnever evaluated
FALSEnever evaluated
0
98 preferred = maximum;-
99 }
never executed: end of block
0
100 }
never executed: end of block
0
101-
102 if (minimum >= 0 && descent > minimum)
minimum >= 0Description
TRUEnever evaluated
FALSEnever evaluated
descent > minimumDescription
TRUEnever evaluated
FALSEnever evaluated
0
103 descent = minimum;
never executed: descent = minimum;
0
104}
never executed: end of block
0
105-
106/*!-
107 \internal-
108*/-
109QGraphicsLayoutItemPrivate::QGraphicsLayoutItemPrivate(QGraphicsLayoutItem *par, bool layout)-
110 : parent(par), userSizeHints(0), isLayout(layout), ownedByLayout(false), graphicsItem(0)-
111{-
112}
never executed: end of block
0
113-
114/*!-
115 \internal-
116*/-
117QGraphicsLayoutItemPrivate::~QGraphicsLayoutItemPrivate()-
118{-
119 // Remove any lazily allocated data-
120 delete[] userSizeHints;-
121}
never executed: end of block
0
122-
123/*!-
124 \internal-
125*/-
126void QGraphicsLayoutItemPrivate::init()-
127{-
128 sizeHintCacheDirty = true;-
129 sizeHintWithConstraintCacheDirty = true;-
130}
never executed: end of block
0
131-
132/*!-
133 \internal-
134*/-
135QSizeF *QGraphicsLayoutItemPrivate::effectiveSizeHints(const QSizeF &constraint) const-
136{-
137 Q_Q(const QGraphicsLayoutItem);-
138 QSizeF *sizeHintCache;-
139 const bool hasConstraint = constraint.width() >= 0 || constraint.height() >= 0;
constraint.width() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
constraint.height() >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
140 if (hasConstraint) {
hasConstraintDescription
TRUEnever evaluated
FALSEnever evaluated
0
141 if (!sizeHintWithConstraintCacheDirty && constraint == cachedConstraint)
!sizeHintWithC...aintCacheDirtyDescription
TRUEnever evaluated
FALSEnever evaluated
constraint == cachedConstraintDescription
TRUEnever evaluated
FALSEnever evaluated
0
142 return cachedSizeHintsWithConstraints;
never executed: return cachedSizeHintsWithConstraints;
0
143 sizeHintCache = cachedSizeHintsWithConstraints;-
144 } else {
never executed: end of block
0
145 if (!sizeHintCacheDirty)
!sizeHintCacheDirtyDescription
TRUEnever evaluated
FALSEnever evaluated
0
146 return cachedSizeHints;
never executed: return cachedSizeHints;
0
147 sizeHintCache = cachedSizeHints;-
148 }
never executed: end of block
0
149-
150 for (int i = 0; i < Qt::NSizeHints; ++i) {
i < Qt::NSizeHintsDescription
TRUEnever evaluated
FALSEnever evaluated
0
151 sizeHintCache[i] = constraint;-
152 if (userSizeHints)
userSizeHintsDescription
TRUEnever evaluated
FALSEnever evaluated
0
153 combineSize(sizeHintCache[i], userSizeHints[i]);
never executed: combineSize(sizeHintCache[i], userSizeHints[i]);
0
154 }
never executed: end of block
0
155-
156 QSizeF &minS = sizeHintCache[Qt::MinimumSize];-
157 QSizeF &prefS = sizeHintCache[Qt::PreferredSize];-
158 QSizeF &maxS = sizeHintCache[Qt::MaximumSize];-
159 QSizeF &descentS = sizeHintCache[Qt::MinimumDescent];-
160-
161 normalizeHints(minS.rwidth(), prefS.rwidth(), maxS.rwidth(), descentS.rwidth());-
162 normalizeHints(minS.rheight(), prefS.rheight(), maxS.rheight(), descentS.rheight());-
163-
164 // if the minimum, preferred and maximum sizes contradict each other-
165 // (e.g. the minimum is larger than the maximum) we give priority to-
166 // the maximum size, then the minimum size and finally the preferred size-
167 COMBINE_SIZE(maxS, q->sizeHint(Qt::MaximumSize, maxS));
never executed: combineSize((maxS), (q->sizeHint(Qt::MaximumSize, maxS)));
(maxS).width() < 0Description
TRUEnever evaluated
FALSEnever evaluated
(maxS).height() < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
168 combineSize(maxS, QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));-
169 expandSize(maxS, prefS);-
170 expandSize(maxS, minS);-
171 boundSize(maxS, QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));-
172-
173 COMBINE_SIZE(minS, q->sizeHint(Qt::MinimumSize, minS));
never executed: combineSize((minS), (q->sizeHint(Qt::MinimumSize, minS)));
(minS).width() < 0Description
TRUEnever evaluated
FALSEnever evaluated
(minS).height() < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
174 expandSize(minS, QSizeF(0, 0));-
175 boundSize(minS, prefS);-
176 boundSize(minS, maxS);-
177-
178 COMBINE_SIZE(prefS, q->sizeHint(Qt::PreferredSize, prefS));
never executed: combineSize((prefS), (q->sizeHint(Qt::PreferredSize, prefS)));
(prefS).width() < 0Description
TRUEnever evaluated
FALSEnever evaluated
(prefS).height() < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
179 expandSize(prefS, minS);-
180 boundSize(prefS, maxS);-
181-
182 // Not supported yet-
183 // COMBINE_SIZE(descentS, q->sizeHint(Qt::MinimumDescent, constraint));-
184-
185 if (hasConstraint) {
hasConstraintDescription
TRUEnever evaluated
FALSEnever evaluated
0
186 cachedConstraint = constraint;-
187 sizeHintWithConstraintCacheDirty = false;-
188 } else {
never executed: end of block
0
189 sizeHintCacheDirty = false;-
190 }
never executed: end of block
0
191 return sizeHintCache;
never executed: return sizeHintCache;
0
192}-
193-
194-
195/*!-
196 \internal-
197-
198 Returns the parent item of this layout, or 0 if this layout is-
199 not installed on any widget.-
200-
201 If this is the item that the layout is installed on, it will return "itself".-
202-
203 If the layout is a sub-layout, this function returns the parent-
204 widget of the parent layout.-
205-
206 Note that it will traverse up the layout item hierarchy instead of just calling-
207 QGraphicsItem::parentItem(). This is on purpose.-
208-
209 \sa parent()-
210*/-
211QGraphicsItem *QGraphicsLayoutItemPrivate::parentItem() const-
212{-
213 Q_Q(const QGraphicsLayoutItem);-
214-
215 const QGraphicsLayoutItem *parent = q;-
216 while (parent && parent->isLayout()) {
parentDescription
TRUEnever evaluated
FALSEnever evaluated
parent->isLayout()Description
TRUEnever evaluated
FALSEnever evaluated
0
217 parent = parent->parentLayoutItem();-
218 }
never executed: end of block
0
219 return parent ? parent->graphicsItem() : 0;
never executed: return parent ? parent->graphicsItem() : 0;
0
220}-
221-
222/*!-
223 \internal-
224-
225 Ensures that userSizeHints is allocated.-
226 This function must be called before any dereferencing.-
227*/-
228void QGraphicsLayoutItemPrivate::ensureUserSizeHints()-
229{-
230 if (!userSizeHints)
!userSizeHintsDescription
TRUEnever evaluated
FALSEnever evaluated
0
231 userSizeHints = new QSizeF[Qt::NSizeHints];
never executed: userSizeHints = new QSizeF[Qt::NSizeHints];
0
232}
never executed: end of block
0
233-
234/*!-
235 \internal-
236-
237 Sets the user size hint \a which to \a size. Use an invalid size to unset the size hint.-
238 */-
239void QGraphicsLayoutItemPrivate::setSize(Qt::SizeHint which, const QSizeF &size)-
240{-
241 Q_Q(QGraphicsLayoutItem);-
242-
243 if (userSizeHints) {
userSizeHintsDescription
TRUEnever evaluated
FALSEnever evaluated
0
244 if (size == userSizeHints[which])
size == userSizeHints[which]Description
TRUEnever evaluated
FALSEnever evaluated
0
245 return;
never executed: return;
0
246 } else if (size.width() < 0 && size.height() < 0) {
never executed: end of block
size.width() < 0Description
TRUEnever evaluated
FALSEnever evaluated
size.height() < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
247 return;
never executed: return;
0
248 }-
249-
250 ensureUserSizeHints();-
251 userSizeHints[which] = size;-
252 q->updateGeometry();-
253}
never executed: end of block
0
254-
255/*!-
256 \internal-
257-
258 Sets the width of the user size hint \a which to \a width.-
259 */-
260void QGraphicsLayoutItemPrivate::setSizeComponent(-
261 Qt::SizeHint which, SizeComponent component, qreal value)-
262{-
263 Q_Q(QGraphicsLayoutItem);-
264 ensureUserSizeHints();-
265 qreal &userValue = (component == Width)
(component == Width)Description
TRUEnever evaluated
FALSEnever evaluated
0
266 ? userSizeHints[which].rwidth()-
267 : userSizeHints[which].rheight();-
268 if (value == userValue)
value == userValueDescription
TRUEnever evaluated
FALSEnever evaluated
0
269 return;
never executed: return;
0
270 userValue = value;-
271 q->updateGeometry();-
272}
never executed: end of block
0
273-
274-
275bool QGraphicsLayoutItemPrivate::hasHeightForWidth() const-
276{-
277 Q_Q(const QGraphicsLayoutItem);-
278 if (isLayout) {
isLayoutDescription
TRUEnever evaluated
FALSEnever evaluated
0
279 const QGraphicsLayout *l = static_cast<const QGraphicsLayout *>(q);-
280 for (int i = l->count() - 1; i >= 0; --i) {
i >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
281 if (QGraphicsLayoutItemPrivate::get(l->itemAt(i))->hasHeightForWidth())
QGraphicsLayou...ightForWidth()Description
TRUEnever evaluated
FALSEnever evaluated
0
282 return true;
never executed: return true;
0
283 }
never executed: end of block
0
284 } else if (QGraphicsItem *item = q->graphicsItem()) {
never executed: end of block
QGraphicsItem ...graphicsItem()Description
TRUEnever evaluated
FALSEnever evaluated
0
285 if (item->isWidget()) {
item->isWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
286 QGraphicsWidget *w = static_cast<QGraphicsWidget *>(item);-
287 if (w->layout()) {
w->layout()Description
TRUEnever evaluated
FALSEnever evaluated
0
288 return QGraphicsLayoutItemPrivate::get(w->layout())->hasHeightForWidth();
never executed: return QGraphicsLayoutItemPrivate::get(w->layout())->hasHeightForWidth();
0
289 }-
290 }
never executed: end of block
0
291 }
never executed: end of block
0
292 return q->sizePolicy().hasHeightForWidth();
never executed: return q->sizePolicy().hasHeightForWidth();
0
293}-
294-
295bool QGraphicsLayoutItemPrivate::hasWidthForHeight() const-
296{-
297 Q_Q(const QGraphicsLayoutItem);-
298 if (isLayout) {
isLayoutDescription
TRUEnever evaluated
FALSEnever evaluated
0
299 const QGraphicsLayout *l = static_cast<const QGraphicsLayout *>(q);-
300 for (int i = l->count() - 1; i >= 0; --i) {
i >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
301 if (QGraphicsLayoutItemPrivate::get(l->itemAt(i))->hasWidthForHeight())
QGraphicsLayou...dthForHeight()Description
TRUEnever evaluated
FALSEnever evaluated
0
302 return true;
never executed: return true;
0
303 }
never executed: end of block
0
304 } else if (QGraphicsItem *item = q->graphicsItem()) {
never executed: end of block
QGraphicsItem ...graphicsItem()Description
TRUEnever evaluated
FALSEnever evaluated
0
305 if (item->isWidget()) {
item->isWidget()Description
TRUEnever evaluated
FALSEnever evaluated
0
306 QGraphicsWidget *w = static_cast<QGraphicsWidget *>(item);-
307 if (w->layout()) {
w->layout()Description
TRUEnever evaluated
FALSEnever evaluated
0
308 return QGraphicsLayoutItemPrivate::get(w->layout())->hasWidthForHeight();
never executed: return QGraphicsLayoutItemPrivate::get(w->layout())->hasWidthForHeight();
0
309 }-
310 }
never executed: end of block
0
311 }
never executed: end of block
0
312 return q->sizePolicy().hasWidthForHeight();
never executed: return q->sizePolicy().hasWidthForHeight();
0
313}-
314-
315/*!-
316 \class QGraphicsLayoutItem-
317 \brief The QGraphicsLayoutItem class can be inherited to allow your custom-
318 items to be managed by layouts.-
319 \since 4.4-
320 \ingroup graphicsview-api-
321 \inmodule QtWidgets-
322-
323 QGraphicsLayoutItem is an abstract class that defines a set of virtual-
324 functions describing sizes, size policies, and size hints for any object-
325 arranged by QGraphicsLayout. The API contains functions relevant-
326 for both the item itself and for the user of the item as most of-
327 QGraphicsLayoutItem's functions are also part of the subclass' public API.-
328-
329 In most cases, existing layout-aware classes such as QGraphicsWidget and-
330 QGraphicsLayout already provide the functionality you require. However,-
331 subclassing these classes will enable you to create both graphical-
332 elements that work well with layouts (QGraphicsWidget) or custom layouts-
333 (QGraphicsLayout).-
334-
335 \section1 Subclassing QGraphicsLayoutItem-
336-
337 If you create a subclass of QGraphicsLayoutItem and reimplement its-
338 virtual functions, you will enable the layout to resize and position your-
339 item along with other QGraphicsLayoutItems including QGraphicsWidget-
340 and QGraphicsLayout.-
341-
342 You can start by reimplementing important functions: the protected-
343 sizeHint() function, as well as the public setGeometry()-
344 function. If you want your items to be aware of immediate geometry-
345 changes, you can also reimplement updateGeometry().-
346-
347 The geometry, size hint, and size policy affect the item's size and-
348 position. Calling setGeometry() will always resize and reposition the item-
349 immediately. Normally, this function is called by QGraphicsLayout after-
350 the layout has been activated, but it can also be called by the item's user-
351 at any time.-
352-
353 The sizeHint() function returns the item' minimum, preferred and maximum-
354 size hints. You can override these properties by calling setMinimumSize(),-
355 setPreferredSize() or setMaximumSize(). You can also use functions such as-
356 setMinimumWidth() or setMaximumHeight() to set only the width or height-
357 component if desired.-
358-
359 The effectiveSizeHint() function, on the other hand, returns a size hint-
360 for any given Qt::SizeHint, and guarantees that the returned size is bound-
361 to the minimum and maximum sizes and size hints. You can set the item's-
362 vertical and horizontal size policy by calling setSizePolicy(). The-
363 sizePolicy property is used by the layout system to describe how this item-
364 prefers to grow or shrink.-
365-
366 \section1 Nesting QGraphicsLayoutItems-
367-
368 QGraphicsLayoutItems can be nested within other QGraphicsLayoutItems,-
369 similar to layouts that can contain sublayouts. This is done either by-
370 passing a QGraphicsLayoutItem pointer to QGraphicsLayoutItem's-
371 protected constructor, or by calling setParentLayoutItem(). The-
372 parentLayoutItem() function returns a pointer to the item's layoutItem-
373 parent. If the item's parent is 0 or if the parent does not inherit-
374 from QGraphicsItem, the parentLayoutItem() function then returns 0.-
375 isLayout() returns \c true if the QGraphicsLayoutItem subclass is itself a-
376 layout, or false otherwise.-
377-
378 Qt uses QGraphicsLayoutItem to provide layout functionality in the-
379 \l{Graphics View Framework}, but in the future its use may spread-
380 throughout Qt itself.-
381-
382 \sa QGraphicsWidget, QGraphicsLayout, QGraphicsLinearLayout,-
383 QGraphicsGridLayout-
384*/-
385-
386/*!-
387 Constructs the QGraphicsLayoutItem object. \a parent becomes the object's-
388 parent. If \a isLayout is true the item is a layout, otherwise-
389 \a isLayout is false.-
390*/-
391QGraphicsLayoutItem::QGraphicsLayoutItem(QGraphicsLayoutItem *parent, bool isLayout)-
392 : d_ptr(new QGraphicsLayoutItemPrivate(parent, isLayout))-
393{-
394 Q_D(QGraphicsLayoutItem);-
395 d->init();-
396 d->sizePolicy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);-
397 d->q_ptr = this;-
398}
never executed: end of block
0
399-
400/*!-
401 \internal-
402*/-
403QGraphicsLayoutItem::QGraphicsLayoutItem(QGraphicsLayoutItemPrivate &dd)-
404 : d_ptr(&dd)-
405{-
406 Q_D(QGraphicsLayoutItem);-
407 d->init();-
408 d->q_ptr = this;-
409}
never executed: end of block
0
410-
411/*!-
412 Destroys the QGraphicsLayoutItem object.-
413*/-
414QGraphicsLayoutItem::~QGraphicsLayoutItem()-
415{-
416 QGraphicsLayoutItem *parentLI = parentLayoutItem();-
417 if (parentLI && parentLI->isLayout()) {
parentLIDescription
TRUEnever evaluated
FALSEnever evaluated
parentLI->isLayout()Description
TRUEnever evaluated
FALSEnever evaluated
0
418 QGraphicsLayout *lay = static_cast<QGraphicsLayout*>(parentLI);-
419 // this is not optimal-
420 for (int i = lay->count() - 1; i >= 0; --i) {
i >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
421 if (lay->itemAt(i) == this) {
lay->itemAt(i) == thisDescription
TRUEnever evaluated
FALSEnever evaluated
0
422 lay->removeAt(i);-
423 break;
never executed: break;
0
424 }-
425 }
never executed: end of block
0
426 }
never executed: end of block
0
427}
never executed: end of block
0
428-
429/*!-
430 \fn virtual QSizeF QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const = 0;-
431-
432 This pure virtual function returns the size hint for \a which of the-
433 QGraphicsLayoutItem, using the width or height of \a constraint to-
434 constrain the output.-
435-
436 Reimplement this function in a subclass of QGraphicsLayoutItem to-
437 provide the necessary size hints for your items.-
438-
439 \sa effectiveSizeHint()-
440*/-
441-
442/*!-
443 Sets the size policy to \a policy. The size policy describes how the item-
444 should grow horizontally and vertically when arranged in a layout.-
445-
446 QGraphicsLayoutItem's default size policy is (QSizePolicy::Fixed,-
447 QSizePolicy::Fixed, QSizePolicy::DefaultType), but it is common for-
448 subclasses to change the default. For example, QGraphicsWidget defaults-
449 to (QSizePolicy::Preferred, QSizePolicy::Preferred,-
450 QSizePolicy::DefaultType).-
451-
452 \sa sizePolicy(), QWidget::sizePolicy()-
453*/-
454void QGraphicsLayoutItem::setSizePolicy(const QSizePolicy &policy)-
455{-
456 Q_D(QGraphicsLayoutItem);-
457 if (d->sizePolicy == policy)
d->sizePolicy == policyDescription
TRUEnever evaluated
FALSEnever evaluated
0
458 return;
never executed: return;
0
459 d->sizePolicy = policy;-
460 updateGeometry();-
461}
never executed: end of block
0
462-
463/*!-
464 \overload-
465-
466 This function is equivalent to calling-
467 setSizePolicy(QSizePolicy(\a hPolicy, \a vPolicy, \a controlType)).-
468-
469 \sa sizePolicy(), QWidget::sizePolicy()-
470*/-
471void QGraphicsLayoutItem::setSizePolicy(QSizePolicy::Policy hPolicy,-
472 QSizePolicy::Policy vPolicy,-
473 QSizePolicy::ControlType controlType)-
474{-
475 setSizePolicy(QSizePolicy(hPolicy, vPolicy, controlType));-
476}
never executed: end of block
0
477-
478/*!-
479 Returns the current size policy.-
480-
481 \sa setSizePolicy(), QWidget::sizePolicy()-
482*/-
483QSizePolicy QGraphicsLayoutItem::sizePolicy() const-
484{-
485 Q_D(const QGraphicsLayoutItem);-
486 return d->sizePolicy;
never executed: return d->sizePolicy;
0
487}-
488-
489/*!-
490 Sets the minimum size to \a size. This property overrides sizeHint() for-
491 Qt::MinimumSize and ensures that effectiveSizeHint() will never return-
492 a size smaller than \a size. In order to unset the minimum size, use an-
493 invalid size.-
494-
495 \sa minimumSize(), maximumSize(), preferredSize(), Qt::MinimumSize,-
496 sizeHint(), setMinimumWidth(), setMinimumHeight()-
497*/-
498void QGraphicsLayoutItem::setMinimumSize(const QSizeF &size)-
499{-
500 d_ptr->setSize(Qt::MinimumSize, size);-
501}
never executed: end of block
0
502-
503/*!-
504 \fn QGraphicsLayoutItem::setMinimumSize(qreal w, qreal h)-
505-
506 This convenience function is equivalent to calling-
507 setMinimumSize(QSizeF(\a w, \a h)).-
508-
509 \sa minimumSize(), setMaximumSize(), setPreferredSize(), sizeHint()-
510*/-
511-
512/*!-
513 Returns the minimum size.-
514-
515 \sa setMinimumSize(), preferredSize(), maximumSize(), Qt::MinimumSize,-
516 sizeHint()-
517*/-
518QSizeF QGraphicsLayoutItem::minimumSize() const-
519{-
520 return effectiveSizeHint(Qt::MinimumSize);
never executed: return effectiveSizeHint(Qt::MinimumSize);
0
521}-
522-
523/*!-
524 Sets the minimum width to \a width.-
525-
526 \sa minimumWidth(), setMinimumSize(), minimumSize()-
527*/-
528void QGraphicsLayoutItem::setMinimumWidth(qreal width)-
529{-
530 d_ptr->setSizeComponent(Qt::MinimumSize, d_ptr->Width, width);-
531}
never executed: end of block
0
532-
533/*!-
534 Sets the minimum height to \a height.-
535-
536 \sa minimumHeight(), setMinimumSize(), minimumSize()-
537*/-
538void QGraphicsLayoutItem::setMinimumHeight(qreal height)-
539{-
540 d_ptr->setSizeComponent(Qt::MinimumSize, d_ptr->Height, height);-
541}
never executed: end of block
0
542-
543-
544/*!-
545 Sets the preferred size to \a size. This property overrides sizeHint() for-
546 Qt::PreferredSize and provides the default value for effectiveSizeHint().-
547 In order to unset the preferred size, use an invalid size.-
548-
549 \sa preferredSize(), minimumSize(), maximumSize(), Qt::PreferredSize,-
550 sizeHint()-
551*/-
552void QGraphicsLayoutItem::setPreferredSize(const QSizeF &size)-
553{-
554 d_ptr->setSize(Qt::PreferredSize, size);-
555}
never executed: end of block
0
556-
557/*!-
558 \fn QGraphicsLayoutItem::setPreferredSize(qreal w, qreal h)-
559-
560 This convenience function is equivalent to calling-
561 setPreferredSize(QSizeF(\a w, \a h)).-
562-
563 \sa preferredSize(), setMaximumSize(), setMinimumSize(), sizeHint()-
564*/-
565-
566/*!-
567 Returns the preferred size.-
568-
569 \sa setPreferredSize(), minimumSize(), maximumSize(), Qt::PreferredSize,-
570 sizeHint()-
571*/-
572QSizeF QGraphicsLayoutItem::preferredSize() const-
573{-
574 return effectiveSizeHint(Qt::PreferredSize);
never executed: return effectiveSizeHint(Qt::PreferredSize);
0
575}-
576-
577/*!-
578 Sets the preferred height to \a height.-
579-
580 \sa preferredWidth(), setPreferredSize(), preferredSize()-
581*/-
582void QGraphicsLayoutItem::setPreferredHeight(qreal height)-
583{-
584 d_ptr->setSizeComponent(Qt::PreferredSize, d_ptr->Height, height);-
585}
never executed: end of block
0
586-
587/*!-
588 Sets the preferred width to \a width.-
589-
590 \sa preferredHeight(), setPreferredSize(), preferredSize()-
591*/-
592void QGraphicsLayoutItem::setPreferredWidth(qreal width)-
593{-
594 d_ptr->setSizeComponent(Qt::PreferredSize, d_ptr->Width, width);-
595}
never executed: end of block
0
596-
597/*!-
598 Sets the maximum size to \a size. This property overrides sizeHint() for-
599 Qt::MaximumSize and ensures that effectiveSizeHint() will never return a-
600 size larger than \a size. In order to unset the maximum size, use an-
601 invalid size.-
602-
603 \sa maximumSize(), minimumSize(), preferredSize(), Qt::MaximumSize,-
604 sizeHint()-
605*/-
606void QGraphicsLayoutItem::setMaximumSize(const QSizeF &size)-
607{-
608 d_ptr->setSize(Qt::MaximumSize, size);-
609}
never executed: end of block
0
610-
611/*!-
612 \fn QGraphicsLayoutItem::setMaximumSize(qreal w, qreal h)-
613-
614 This convenience function is equivalent to calling-
615 setMaximumSize(QSizeF(\a w, \a h)).-
616-
617 \sa maximumSize(), setMinimumSize(), setPreferredSize(), sizeHint()-
618*/-
619-
620/*!-
621 Returns the maximum size.-
622-
623 \sa setMaximumSize(), minimumSize(), preferredSize(), Qt::MaximumSize,-
624 sizeHint()-
625*/-
626QSizeF QGraphicsLayoutItem::maximumSize() const-
627{-
628 return effectiveSizeHint(Qt::MaximumSize);
never executed: return effectiveSizeHint(Qt::MaximumSize);
0
629}-
630-
631/*!-
632 Sets the maximum width to \a width.-
633-
634 \sa maximumWidth(), setMaximumSize(), maximumSize()-
635*/-
636void QGraphicsLayoutItem::setMaximumWidth(qreal width)-
637{-
638 d_ptr->setSizeComponent(Qt::MaximumSize, d_ptr->Width, width);-
639}
never executed: end of block
0
640-
641/*!-
642 Sets the maximum height to \a height.-
643-
644 \sa maximumHeight(), setMaximumSize(), maximumSize()-
645*/-
646void QGraphicsLayoutItem::setMaximumHeight(qreal height)-
647{-
648 d_ptr->setSizeComponent(Qt::MaximumSize, d_ptr->Height, height);-
649}
never executed: end of block
0
650-
651/*!-
652 \fn qreal QGraphicsLayoutItem::minimumWidth() const-
653-
654 Returns the minimum width.-
655-
656 \sa setMinimumWidth(), setMinimumSize(), minimumSize()-
657*/-
658-
659/*!-
660 \fn qreal QGraphicsLayoutItem::minimumHeight() const-
661-
662 Returns the minimum height.-
663-
664 \sa setMinimumHeight(), setMinimumSize(), minimumSize()-
665*/-
666-
667/*!-
668 \fn qreal QGraphicsLayoutItem::preferredWidth() const-
669-
670 Returns the preferred width.-
671-
672 \sa setPreferredWidth(), setPreferredSize(), preferredSize()-
673*/-
674-
675/*!-
676 \fn qreal QGraphicsLayoutItem::preferredHeight() const-
677-
678 Returns the preferred height.-
679-
680 \sa setPreferredHeight(), setPreferredSize(), preferredSize()-
681*/-
682-
683/*!-
684 \fn qreal QGraphicsLayoutItem::maximumWidth() const-
685-
686 Returns the maximum width.-
687-
688 \sa setMaximumWidth(), setMaximumSize(), maximumSize()-
689*/-
690-
691/*!-
692 \fn qreal QGraphicsLayoutItem::maximumHeight() const-
693-
694 Returns the maximum height.-
695-
696 \sa setMaximumHeight(), setMaximumSize(), maximumSize()-
697*/-
698-
699/*!-
700 \fn virtual void QGraphicsLayoutItem::setGeometry(const QRectF &rect)-
701-
702 This virtual function sets the geometry of the QGraphicsLayoutItem to-
703 \a rect, which is in parent coordinates (e.g., the top-left corner of \a rect-
704 is equivalent to the item's position in parent coordinates).-
705-
706 You must reimplement this function in a subclass of QGraphicsLayoutItem to-
707 receive geometry updates. The layout will call this function when it does a-
708 rearrangement.-
709-
710 If \a rect is outside of the bounds of minimumSize and maximumSize, it-
711 will be adjusted to its closest size so that it is within the legal-
712 bounds.-
713-
714 \sa geometry()-
715*/-
716void QGraphicsLayoutItem::setGeometry(const QRectF &rect)-
717{-
718 Q_D(QGraphicsLayoutItem);-
719 QSizeF effectiveSize = rect.size().expandedTo(effectiveSizeHint(Qt::MinimumSize))-
720 .boundedTo(effectiveSizeHint(Qt::MaximumSize));-
721 d->geom = QRectF(rect.topLeft(), effectiveSize);-
722}
never executed: end of block
0
723-
724/*!-
725 \fn QRectF QGraphicsLayoutItem::geometry() const-
726-
727 Returns the item's geometry (e.g., position and size) as a-
728 QRectF. This function is equivalent to QRectF(pos(), size()).-
729-
730 \sa setGeometry()-
731*/-
732QRectF QGraphicsLayoutItem::geometry() const-
733{-
734 Q_D(const QGraphicsLayoutItem);-
735 return d->geom;
never executed: return d->geom;
0
736}-
737-
738/*!-
739 This virtual function provides the \a left, \a top, \a right and \a bottom-
740 contents margins for this QGraphicsLayoutItem. The default implementation-
741 assumes all contents margins are 0. The parameters point to values stored-
742 in qreals. If any of the pointers is 0, that value will not be updated.-
743-
744 \sa QGraphicsWidget::setContentsMargins()-
745*/-
746void QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const-
747{-
748 if (left)
leftDescription
TRUEnever evaluated
FALSEnever evaluated
0
749 *left = 0;
never executed: *left = 0;
0
750 if (top)
topDescription
TRUEnever evaluated
FALSEnever evaluated
0
751 *top = 0;
never executed: *top = 0;
0
752 if (right)
rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
753 *right = 0;
never executed: *right = 0;
0
754 if (bottom)
bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
755 *bottom = 0;
never executed: *bottom = 0;
0
756}
never executed: end of block
0
757-
758/*!-
759 Returns the contents rect in local coordinates.-
760-
761 The contents rect defines the subrectangle used by an associated layout-
762 when arranging subitems. This function is a convenience function that-
763 adjusts the item's geometry() by its contents margins. Note that-
764 getContentsMargins() is a virtual function that you can reimplement to-
765 return the item's contents margins.-
766-
767 \sa getContentsMargins(), geometry()-
768*/-
769QRectF QGraphicsLayoutItem::contentsRect() const-
770{-
771 qreal left, top, right, bottom;-
772 getContentsMargins(&left, &top, &right, &bottom);-
773 return QRectF(QPointF(), geometry().size()).adjusted(+left, +top, -right, -bottom);
never executed: return QRectF(QPointF(), geometry().size()).adjusted(+left, +top, -right, -bottom);
0
774}-
775-
776/*!-
777 Returns the effective size hint for this QGraphicsLayoutItem.-
778-
779 \a which is the size hint in question.-
780 \a constraint is an optional argument that defines a special constrain-
781 when calculating the effective size hint. By default, \a constraint is-
782 QSizeF(-1, -1), which means there is no constraint to the size hint.-
783-
784 If you want to specify the widget's size hint for a given width or height,-
785 you can provide the fixed dimension in \a constraint. This is useful for-
786 widgets that can grow only either vertically or horizontally, and need to-
787 set either their width or their height to a special value.-
788-
789 For example, a text paragraph item fit into a column width of 200 may-
790 grow vertically. You can pass QSizeF(200, -1) as a constraint to get a-
791 suitable minimum, preferred and maximum height).-
792-
793 You can adjust the effective size hint by reimplementing sizeHint()-
794 in a QGraphicsLayoutItem subclass, or by calling one of the following-
795 functions: setMinimumSize(), setPreferredSize, or setMaximumSize()-
796 (or a combination of both).-
797-
798 This function caches each of the size hints and guarantees that-
799 sizeHint() will be called only once for each value of \a which - unless-
800 \a constraint is not specified and updateGeometry() has been called.-
801-
802 \sa sizeHint()-
803*/-
804QSizeF QGraphicsLayoutItem::effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint) const-
805{-
806 Q_D(const QGraphicsLayoutItem);-
807-
808 if (!d->userSizeHints && constraint.isValid())
!d->userSizeHintsDescription
TRUEnever evaluated
FALSEnever evaluated
constraint.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
809 return constraint;
never executed: return constraint;
0
810-
811 // ### should respect size policy???-
812 return d_ptr->effectiveSizeHints(constraint)[which];
never executed: return d_ptr->effectiveSizeHints(constraint)[which];
0
813}-
814-
815/*!-
816 This virtual function discards any cached size hint information. You-
817 should always call this function if you change the return value of the-
818 sizeHint() function. Subclasses must always call the base implementation-
819 when reimplementing this function.-
820-
821 \sa effectiveSizeHint()-
822*/-
823void QGraphicsLayoutItem::updateGeometry()-
824{-
825 Q_D(QGraphicsLayoutItem);-
826 d->sizeHintCacheDirty = true;-
827 d->sizeHintWithConstraintCacheDirty = true;-
828}
never executed: end of block
0
829-
830/*!-
831 Returns the parent of this QGraphicsLayoutItem, or 0 if there is no parent,-
832 or if the parent does not inherit from QGraphicsLayoutItem-
833 (QGraphicsLayoutItem is often used through multiple inheritance with-
834 QObject-derived classes).-
835-
836 \sa setParentLayoutItem()-
837*/-
838QGraphicsLayoutItem *QGraphicsLayoutItem::parentLayoutItem() const-
839{-
840 return d_func()->parent;
never executed: return d_func()->parent;
0
841}-
842-
843/*!-
844 Sets the parent of this QGraphicsLayoutItem to \a parent.-
845-
846 \sa parentLayoutItem()-
847*/-
848void QGraphicsLayoutItem::setParentLayoutItem(QGraphicsLayoutItem *parent)-
849{-
850 d_func()->parent = parent;-
851}
never executed: end of block
0
852-
853/*!-
854 Returns \c true if this QGraphicsLayoutItem is a layout (e.g., is inherited-
855 by an object that arranges other QGraphicsLayoutItem objects); otherwise-
856 returns \c false.-
857-
858 \sa QGraphicsLayout-
859*/-
860bool QGraphicsLayoutItem::isLayout() const-
861{-
862 return d_func()->isLayout;
never executed: return d_func()->isLayout;
0
863}-
864-
865/*!-
866 \since 4.6-
867-
868 Returns whether a layout should delete this item in its destructor.-
869 If its true, then the layout will delete it. If its false, then it is-
870 assumed that another object has the ownership of it, and the layout won't-
871 delete this item.-
872-
873 If the item inherits both QGraphicsItem and QGraphicsLayoutItem (such-
874 as QGraphicsWidget does) the item is really part of two ownership-
875 hierarchies. This property informs what the layout should do with its-
876 child items when it is destructed. In the case of QGraphicsWidget, it-
877 is preferred that when the layout is deleted it won't delete its children-
878 (since they are also part of the graphics item hierarchy).-
879-
880 By default this value is initialized to false in QGraphicsLayoutItem,-
881 but it is overridden by QGraphicsLayout to return true. This is because-
882 QGraphicsLayout is not normally part of the QGraphicsItem hierarchy, so the-
883 parent layout should delete it.-
884 Subclasses might override this default behaviour by calling-
885 setOwnedByLayout(true).-
886-
887 \sa setOwnedByLayout()-
888*/-
889bool QGraphicsLayoutItem::ownedByLayout() const-
890{-
891 return d_func()->ownedByLayout;
never executed: return d_func()->ownedByLayout;
0
892}-
893/*!-
894 \since 4.6-
895-
896 Sets whether a layout should delete this item in its destructor or not.-
897 \a ownership must be true to in order for the layout to delete it.-
898 \sa ownedByLayout()-
899*/-
900void QGraphicsLayoutItem::setOwnedByLayout(bool ownership)-
901{-
902 d_func()->ownedByLayout = ownership;-
903}
never executed: end of block
0
904-
905/*!-
906 * Returns the QGraphicsItem that this layout item represents.-
907 * For QGraphicsWidget it will return itself. For custom items it can return an-
908 * aggregated value.-
909 *-
910 * \sa setGraphicsItem()-
911 */-
912QGraphicsItem *QGraphicsLayoutItem::graphicsItem() const-
913{-
914 return d_func()->graphicsItem;
never executed: return d_func()->graphicsItem;
0
915}-
916-
917/*!-
918 * If the QGraphicsLayoutItem represents a QGraphicsItem, and it wants to take-
919 * advantage of the automatic reparenting capabilities of QGraphicsLayout it-
920 * should set this value.-
921 * Note that if you delete \a item and not delete the layout item, you are-
922 * responsible of calling setGraphicsItem(0) in order to avoid having a-
923 * dangling pointer.-
924 *-
925 * \sa graphicsItem()-
926 */-
927void QGraphicsLayoutItem::setGraphicsItem(QGraphicsItem *item)-
928{-
929 d_func()->graphicsItem = item;-
930}
never executed: end of block
0
931-
932QT_END_NAMESPACE-
933-
934#endif //QT_NO_GRAPHICSVIEW-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9