Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qquickpane.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 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#include "qquickpane_p.h"
5#include "qquickpane_p_p.h"
7
8#include <QtCore/qloggingcategory.h>
9
11
12Q_LOGGING_CATEGORY(lcPane, "qt.quick.controls.pane")
13
14
18
102{
103 Q_Q(QQuickPane);
105 q->setAcceptedMouseButtons(Qt::AllButtons);
106#if QT_CONFIG(cursor)
107 q->setCursor(Qt::ArrowCursor);
108#endif
109 connect(q, &QQuickControl::implicitContentWidthChanged, this, &QQuickPanePrivate::updateContentWidth);
110 connect(q, &QQuickControl::implicitContentHeightChanged, this, &QQuickPanePrivate::updateContentHeight);
111}
112
114{
115 if (!contentItem)
116 return QList<QQuickItem *>();
117
118 return contentItem->childItems();
119}
120
122{
123 Q_Q(QQuickPane);
125 return item;
126
127 return new QQuickContentItem(q);
128}
129
131{
133
134 if (item == firstChild)
136}
137
139{
141
142 if (item == firstChild)
144}
145
147{
148 Q_Q(QQuickPane);
149 QQuickItem *newFirstChild = contentChildItems().value(0);
150 if (newFirstChild != firstChild) {
151 if (firstChild)
153 if (newFirstChild)
154 addImplicitSizeListener(newFirstChild);
155 firstChild = newFirstChild;
156 }
157
159 emit q->contentChildrenChanged();
160}
161
163{
164 if (!contentItem)
165 return 0;
166
168 if (!qFuzzyIsNull(cw))
169 return cw;
170
171 const auto contentChildren = contentChildItems();
172 if (contentChildren.size() == 1)
173 return contentChildren.first()->implicitWidth();
174
175 return 0;
176}
177
179{
180 if (!contentItem)
181 return 0;
182
184 if (!qFuzzyIsNull(ch))
185 return ch;
186
187 const auto contentChildren = contentChildItems();
188 if (contentChildren.size() == 1)
189 return contentChildren.first()->implicitHeight();
190
191 return 0;
192}
193
195{
196 Q_Q(QQuickPane);
198 return;
199
200 const qreal oldContentWidth = contentWidth;
202 qCDebug(lcPane) << "contentWidth of" << q << "changed to" << contentWidth;
203 q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(oldContentWidth, contentHeight));
204 emit q->contentWidthChanged();
205}
206
208{
209 Q_Q(QQuickPane);
211 return;
212
213 const qreal oldContentHeight = contentHeight;
215 qCDebug(lcPane) << "contentHeight of" << q << "changed to" << contentHeight;
216 q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(contentWidth, oldContentHeight));
217 emit q->contentHeightChanged();
218}
219
220/*
221 A pane needs to be opaque to mouse events, so that events don't get
222 propagated through to controls covered by the pane.
223*/
224bool QQuickPanePrivate::handlePress(const QPointF &point, ulong timestamp)
225{
226 QQuickControlPrivate::handlePress(point, timestamp);
227 return true;
228}
229
232{
233 Q_D(QQuickPane);
234 d->init();
235}
236
238{
239 Q_D(QQuickPane);
240 d->removeImplicitSizeListener(d->contentItem);
241 d->removeImplicitSizeListener(d->firstChild);
242}
243
245 : QQuickControl(dd, parent)
246{
247 Q_D(QQuickPane);
248 d->init();
249}
250
262{
263 Q_D(const QQuickPane);
264 return d->contentWidth;
265}
266
268{
269 Q_D(QQuickPane);
270 d->hasContentWidth = true;
271 if (qFuzzyCompare(d->contentWidth, width))
272 return;
273
274 const qreal oldWidth = d->contentWidth;
275 d->contentWidth = width;
276 contentSizeChange(QSizeF(width, d->contentHeight), QSizeF(oldWidth, d->contentHeight));
278}
279
281{
282 Q_D(QQuickPane);
283 if (!d->hasContentWidth)
284 return;
285
286 d->hasContentHeight = false;
287 d->updateContentWidth();
288}
289
301{
302 Q_D(const QQuickPane);
303 return d->contentHeight;
304}
305
307{
308 Q_D(QQuickPane);
309 d->hasContentHeight = true;
310 if (qFuzzyCompare(d->contentHeight, height))
311 return;
312
313 const qreal oldHeight = d->contentHeight;
314 d->contentHeight = height;
315 contentSizeChange(QSizeF(d->contentWidth, height), QSizeF(d->contentWidth, oldHeight));
317}
318
320{
321 Q_D(QQuickPane);
322 if (!d->hasContentHeight)
323 return;
324
325 d->hasContentHeight = false;
326 d->updateContentHeight();
327}
328
344{
345 Q_Q(QQuickPane);
346 return QQmlListProperty<QObject>(q->contentItem(), nullptr,
351}
352
367{
368 Q_Q(QQuickPane);
369 return QQmlListProperty<QQuickItem>(q->contentItem(), nullptr,
374}
375
377{
378 Q_D(QQuickPane);
380 d->updateImplicitContentSize();
381}
382
384{
385 Q_D(QQuickPane);
386 QQuickControl::contentItemChange(newItem, oldItem);
387 if (oldItem) {
388 d->removeImplicitSizeListener(oldItem);
390 }
391 if (newItem) {
392 d->addImplicitSizeListener(newItem);
394 }
395 d->contentChildrenChange();
396}
397
398void QQuickPane::contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize)
399{
400 Q_UNUSED(newSize);
401 Q_UNUSED(oldSize);
402}
403
404#if QT_CONFIG(accessibility)
405QAccessible::Role QQuickPane::accessibleRole() const
406{
407 return QAccessible::Pane;
408}
409#endif
410
412
413#include "moc_qquickpane_p.cpp"
Definition qlist.h:74
T value(qsizetype i) const
Definition qlist.h:661
static QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot, Qt::ConnectionType type=Qt::AutoConnection)
Definition qobject_p.h:298
static bool disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot)
Definition qobject_p.h:327
\inmodule QtCore\reentrant
Definition qpoint.h:214
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
Definition qqmllist.h:24
void itemImplicitWidthChanged(QQuickItem *item) override
virtual bool handlePress(const QPointF &point, ulong timestamp)
QQuickDeferredPointer< QQuickItem > contentItem
virtual QQuickItem * getContentItem()
void removeImplicitSizeListener(QQuickItem *item, ChangeTypes changes=ImplicitSizeChanges)
void addImplicitSizeListener(QQuickItem *item, ChangeTypes changes=ImplicitSizeChanges)
void itemImplicitHeightChanged(QQuickItem *item) override
virtual void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
static void data_clear(QQmlListProperty< QObject > *)
static qsizetype children_count(QQmlListProperty< QQuickItem > *)
static void children_clear(QQmlListProperty< QQuickItem > *)
static qsizetype data_count(QQmlListProperty< QObject > *)
\qmlproperty list<QtObject> QtQuick::Item::data \qmldefault
static QQuickItem * children_at(QQmlListProperty< QQuickItem > *, qsizetype)
static QObject * data_at(QQmlListProperty< QObject > *, qsizetype)
static void children_append(QQmlListProperty< QQuickItem > *, QQuickItem *)
static void data_append(QQmlListProperty< QObject > *, QObject *)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Definition qquickitem.h:64
QList< QQuickItem * > childItems() const
Returns the children of this item.
qreal implicitWidth
Definition qquickitem.h:113
qreal width
This property holds the width of this item.
Definition qquickitem.h:76
void childrenChanged()
qreal implicitHeight
Definition qquickitem.h:114
qreal height
This property holds the height of this item.
Definition qquickitem.h:77
bool handlePress(const QPointF &point, ulong timestamp) override
virtual QQmlListProperty< QObject > contentData()
\qmlproperty list<QtObject> QtQuick.Controls::Pane::contentData \qmldefault
void contentChildrenChange()
void itemImplicitWidthChanged(QQuickItem *item) override
qreal getContentWidth() const override
QQuickItem * getContentItem() override
virtual QList< QQuickItem * > contentChildItems() const
QQuickItem * firstChild
virtual QQmlListProperty< QQuickItem > contentChildren()
\qmlproperty list<Item> QtQuick.Controls::Pane::contentChildren
void itemImplicitHeightChanged(QQuickItem *item) override
qreal getContentHeight() const override
void resetContentHeight()
void setContentWidth(qreal width)
void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) override
void contentWidthChanged()
QQuickPane(QQuickItem *parent=nullptr)
void resetContentWidth()
void setContentHeight(qreal height)
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
void contentHeightChanged()
virtual void contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize)
qreal contentHeight
qreal contentWidth
\inmodule QtCore
Definition qsize.h:207
Combined button and popup list for selecting options.
@ AllButtons
Definition qnamespace.h:89
@ ArrowCursor
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
Definition qfloat16.h:287
bool qFuzzyIsNull(qfloat16 f) noexcept
Definition qfloat16.h:303
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
GLint GLsizei GLsizei height
GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
static const struct TessellationWindingOrderTab cw[]
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
#define emit
#define Q_UNUSED(x)
unsigned long ulong
Definition qtypes.h:30
double qreal
Definition qtypes.h:92
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)
QGraphicsItem * item
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent