191QGraphicsAnchorLayout::~QGraphicsAnchorLayout()
193 Q_D(QGraphicsAnchorLayout);
195 for (
int i = count() - 1; i >= 0; --i) {
196 QGraphicsLayoutItem *item = d->items.at(i);
199 if (item->ownedByLayout())
204 d->removeCenterConstraints(
this, Qt::Horizontal);
205 d->removeCenterConstraints(
this, Qt::Vertical);
206 d->deleteLayoutEdges();
208 Q_ASSERT(d->itemCenterConstraints[Qt::Horizontal].isEmpty());
209 Q_ASSERT(d->itemCenterConstraints[Qt::Vertical].isEmpty());
210 Q_ASSERT(d->items.isEmpty());
211 Q_ASSERT(d->m_vertexList.isEmpty());
237QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge,
238 QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
240 Q_D(QGraphicsAnchorLayout);
241 QGraphicsAnchor *a = d->addAnchor(firstItem, firstEdge, secondItem, secondEdge);
251QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge,
252 QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
254 Q_D(QGraphicsAnchorLayout);
255 return d->getAnchor(firstItem, firstEdge, secondItem, secondEdge);
280void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem,
281 Qt::Corner firstCorner,
282 QGraphicsLayoutItem *secondItem,
283 Qt::Corner secondCorner)
285 Q_D(QGraphicsAnchorLayout);
288 Qt::AnchorPoint firstEdge = (firstCorner & 1 ? Qt::AnchorRight: Qt::AnchorLeft);
289 Qt::AnchorPoint secondEdge = (secondCorner & 1 ? Qt::AnchorRight: Qt::AnchorLeft);
290 if (d->addAnchor(firstItem, firstEdge, secondItem, secondEdge)) {
292 firstEdge = (firstCorner & 2 ? Qt::AnchorBottom: Qt::AnchorTop);
293 secondEdge = (secondCorner & 2 ? Qt::AnchorBottom: Qt::AnchorTop);
294 d->addAnchor(firstItem, firstEdge, secondItem, secondEdge);
316void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem,
317 QGraphicsLayoutItem *secondItem,
318 Qt::Orientations orientations)
321 if (orientations & Qt::Horizontal) {
323 ok = addAnchor(secondItem, Qt::AnchorLeft, firstItem, Qt::AnchorLeft) !=
nullptr;
325 addAnchor(firstItem, Qt::AnchorRight, secondItem, Qt::AnchorRight);
327 if (orientations & Qt::Vertical && ok) {
328 addAnchor(secondItem, Qt::AnchorTop, firstItem, Qt::AnchorTop);
329 addAnchor(firstItem, Qt::AnchorBottom, secondItem, Qt::AnchorBottom);
403void QGraphicsAnchorLayout::setGeometry(
const QRectF &geom)
405 Q_D(QGraphicsAnchorLayout);
407 QGraphicsLayout::setGeometry(geom);
408 d->calculateVertexPositions(Qt::Horizontal);
409 d->calculateVertexPositions(Qt::Vertical);
410 d->setItemsGeometries(geom);
421void QGraphicsAnchorLayout::removeAt(
int index)
423 Q_D(QGraphicsAnchorLayout);
424 QGraphicsLayoutItem *item = d->items.value(index);
430 d->removeCenterConstraints(item, Qt::Horizontal);
431 d->removeCenterConstraints(item, Qt::Vertical);
432 d->removeAnchors(item);
433 d->items.remove(index);
435 item->setParentLayoutItem(
nullptr);
471QSizeF QGraphicsAnchorLayout::sizeHint(Qt::SizeHint which,
const QSizeF &constraint)
const
473 Q_UNUSED(constraint);
474 Q_D(
const QGraphicsAnchorLayout);
485 const_cast<QGraphicsAnchorLayoutPrivate *>(d)->calculateGraphs();
488 QSizeF engineSizeHint{d->sizeHints[Qt::Horizontal][which],
489 d->sizeHints[Qt::Vertical][which]};
491 qreal left, top, right, bottom;
492 getContentsMargins(&left, &top, &right, &bottom);
494 return engineSizeHint + QSizeF(left + right, top + bottom);