100 Q_Q(QQuickPageIndicator);
101 QQuickControlPrivate::handleRelease(point, timestamp);
103 if (pressedItem && contentItem)
104 q->setCurrentIndex(contentItem->childItems().indexOf(pressedItem));
105 updatePressed(
false);
120 Q_Q(
const QQuickPageIndicator);
121 if (!contentItem || !q->contains(pos))
124 QPointF contentPos = q->mapToItem(contentItem, pos);
125 QQuickItem *item = contentItem->childAt(contentPos.x(), contentPos.y());
126 while (item && item->parentItem() != contentItem)
127 item = item->parentItem();
128 if (item && !QQuickItemPrivate::get(item)->isTransparentForPositioner())
132 qreal distance = qInf();
133 QQuickItem *nearest =
nullptr;
134 const auto childItems = contentItem->childItems();
135 for (QQuickItem *child : childItems) {
136 if (QQuickItemPrivate::get(child)->isTransparentForPositioner())
139 QPointF center = child->boundingRect().center();
140 QPointF pt = contentItem->mapToItem(child, contentPos);
142 qreal len = QLineF(center, pt).length();
143 if (len < distance) {
153 QQuickItem *prevItem = pressedItem;
154 pressedItem = pressed ? itemAt(pos) :
nullptr;
155 if (prevItem != pressedItem) {
156 setContextProperty(prevItem, QStringLiteral(
"pressed"),
false);
157 setContextProperty(pressedItem, QStringLiteral(
"pressed"), pressed);
254void QQuickPageIndicator::setInteractive(
bool interactive)
256 Q_D(QQuickPageIndicator);
257 if (d->interactive == interactive)
260 d->interactive = interactive;
262 setAcceptedMouseButtons(Qt::LeftButton);
263#if QT_CONFIG(quicktemplates2_multitouch)
264 setAcceptTouchEvents(
true);
267 setCursor(Qt::ArrowCursor);
270 setAcceptedMouseButtons(Qt::NoButton);
271#if QT_CONFIG(quicktemplates2_multitouch)
272 setAcceptTouchEvents(
true);
278 emit interactiveChanged();
310void QQuickPageIndicator::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)
312 Q_D(QQuickPageIndicator);
313 QQuickControl::contentItemChange(newItem, oldItem);
315 QQuickItemPrivate::get(oldItem)->removeItemChangeListener(d, QQuickItemPrivate::Children);
317 QQuickItemPrivate::get(newItem)->addItemChangeListener(d, QQuickItemPrivate::Children);
Indicates the currently active page.
void updatePressed(bool pressed, const QPointF &pos=QPointF())
bool handleRelease(const QPointF &point, ulong timestamp) override
bool handleMove(const QPointF &point, ulong timestamp) override
void setContextProperty(QQuickItem *item, const QString &name, const QVariant &value)
QQuickItem * itemAt(const QPointF &pos) const
void itemChildAdded(QQuickItem *, QQuickItem *child) override
void handleUngrab() override