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
qquickgridlayoutengine_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 QQUICKGRIDLAYOUTENGINE_P_H
5#define QQUICKGRIDLAYOUTENGINE_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 the graphics view layout classes. This header
13// file may change from version to version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtGui/private/qgridlayoutengine_p.h>
19#include <QtGui/private/qlayoutpolicy_p.h>
20#include <QtCore/qmath.h>
21
22#include "qquickitem.h"
23#include "qquicklayout_p.h"
24#include "qdebug.h"
26
28public:
30 int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = { })
31 : QGridLayoutItem(row, column, rowSpan, columnSpan, alignment), m_item(item), sizeHintCacheDirty(true), useFallbackToWidthOrHeight(true) {}
32
33
34 QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const override
35 {
36 Q_UNUSED(constraint); // Quick Layouts does not support constraint atm
37 return effectiveSizeHints()[which];
38 }
39
41 {
42 if (!sizeHintCacheDirty)
43 return cachedSizeHints;
44
45 QQuickLayout::effectiveSizeHints_helper(m_item, cachedSizeHints, nullptr, useFallbackToWidthOrHeight);
46 useFallbackToWidthOrHeight = false;
47
48 sizeHintCacheDirty = false;
49 return cachedSizeHints;
50 }
51
52 void setCachedSizeHints(QSizeF *sizeHints)
53 {
54 for (int i = 0; i < Qt::NSizeHints; ++i) {
55 cachedSizeHints[i] = sizeHints[i];
56 }
57 sizeHintCacheDirty = false;
58 }
59
61 {
62 qCDebug(lcQuickLayouts) << "QQuickGridLayoutItem::invalidate()";
63 sizeHintCacheDirty = true;
64 }
65
66 QLayoutPolicy::Policy sizePolicy(Qt::Orientation orientation) const override
67 {
69 }
70
71 void setGeometry(const QRectF &rect) override
72 {
74 const QRectF r = info ? rect.marginsRemoved(info->effectiveQMargins()) : rect;
75 const QSizeF oldSize(m_item->width(), m_item->height());
76 const QSizeF newSize = r.size();
77 m_item->setPosition(r.topLeft());
78 if (newSize == oldSize) {
79 // We need to enforce a rearrange when the geometry is the same
80 if (QQuickLayout *lay = qobject_cast<QQuickLayout *>(m_item)) {
81 if (lay->invalidatedArrangement())
82 lay->rearrange(newSize);
83 }
84 } else {
85 m_item->setSize(newSize);
86 }
87 }
88
89 inline virtual QString toString() const override { return QDebug::toString(m_item); }
90
91 QQuickItem *layoutItem() const { return m_item; }
92
94private:
95 mutable QSizeF cachedSizeHints[Qt::NSizeHints];
96 mutable unsigned sizeHintCacheDirty : 1;
97 mutable unsigned useFallbackToWidthOrHeight : 1;
98};
99
101public:
102 QQuickGridLayoutEngine() : QGridLayoutEngine(Qt::AlignVCenter, true /*snapToPixelGrid*/) { }
103
104 int indexOf(QQuickItem *item) const {
105 for (int i = 0; i < q_items.size(); ++i) {
106 if (item == static_cast<QQuickGridLayoutItem*>(q_items.at(i))->layoutItem())
107 return i;
108 }
109 return -1;
110 }
111
113 {
114 for (int i = q_items.size() - 1; i >= 0; --i) {
116 if (item->layoutItem() == layoutItem)
117 return item;
118 }
119 return 0;
120 }
121
122 void setAlignment(QQuickItem *quickItem, Qt::Alignment alignment);
123
124 void setStretchFactor(QQuickItem *quickItem, int stretch, Qt::Orientation orientation);
125
126};
127
128
129
131
132#endif // QQUICKGRIDLAYOUTENGINE_P_H
QList< QGridLayoutItem * > q_items
Qt::Alignment alignment() const
qsizetype size() const noexcept
Definition qlist.h:397
const_reference at(qsizetype i) const noexcept
Definition qlist.h:446
void setStretchFactor(QQuickItem *quickItem, int stretch, Qt::Orientation orientation)
void setAlignment(QQuickItem *quickItem, Qt::Alignment alignment)
QQuickGridLayoutItem * findLayoutItem(QQuickItem *layoutItem) const
int indexOf(QQuickItem *item) const
QLayoutPolicy::Policy sizePolicy(Qt::Orientation orientation) const override
QSizeF * effectiveSizeHints() const
QQuickGridLayoutItem(QQuickItem *item, int row, int column, int rowSpan=1, int columnSpan=1, Qt::Alignment alignment={ })
void setCachedSizeHints(QSizeF *sizeHints)
QQuickItem * layoutItem() const
virtual QString toString() const override
QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const override
void setGeometry(const QRectF &rect) override
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Definition qquickitem.h:63
void setSize(const QSizeF &size)
qreal width
This property holds the width of this item.
Definition qquickitem.h:75
qreal height
This property holds the height of this item.
Definition qquickitem.h:76
void setPosition(const QPointF &)
static QLayoutPolicy::Policy effectiveSizePolicy_helper(QQuickItem *item, Qt::Orientation orientation, QQuickLayoutAttached *info)
static void effectiveSizeHints_helper(QQuickItem *item, QSizeF *cachedSizeHints, QQuickLayoutAttached **info, bool useFallbackToWidthOrHeight)
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore
Definition qsize.h:208
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
rect
[4]
uint alignment
Combined button and popup list for selecting options.
Definition qcompare.h:63
Orientation
Definition qnamespace.h:98
@ NSizeHints
#define qCDebug(category,...)
GLboolean r
[2]
GLenum GLenum GLsizei void GLsizei void * column
GLenum GLenum GLsizei void * row
static void layoutItem(QQuickItem *item, qreal y, qreal width)
QQuickLayoutAttached * attachedLayoutObject(QQuickItem *item, bool create=true)
#define Q_UNUSED(x)
QGraphicsItem * item
QHostInfo info
[0]