123QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutItem *parent)
124 : QGraphicsLayoutItem(*
new QGraphicsLayoutPrivate)
126 setParentLayoutItem(parent);
127 if (parent && !parent->isLayout()) {
129 QGraphicsItem *itemParent = parent->graphicsItem();
130 if (itemParent && itemParent->isWidget()) {
131 static_cast<QGraphicsWidget *>(itemParent)->d_func()->setLayout_helper(
this);
133 qWarning(
"QGraphicsLayout::QGraphicsLayout: Attempt to create a layout with a parent that is"
134 " neither a QGraphicsWidget nor QGraphicsLayout");
137 d_func()->sizePolicy = QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, QSizePolicy::DefaultType);
138 setOwnedByLayout(
true);
144QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutPrivate &dd, QGraphicsLayoutItem *parent)
145 : QGraphicsLayoutItem(dd)
147 setParentLayoutItem(parent);
148 if (parent && !parent->isLayout()) {
150 QGraphicsItem *itemParent = parent->graphicsItem();
151 if (itemParent && itemParent->isWidget()) {
152 static_cast<QGraphicsWidget *>(itemParent)->d_func()->setLayout_helper(
this);
154 qWarning(
"QGraphicsLayout::QGraphicsLayout: Attempt to create a layout with a parent that is"
155 " neither a QGraphicsWidget nor QGraphicsLayout");
158 d_func()->sizePolicy = QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, QSizePolicy::DefaultType);
159 setOwnedByLayout(
true);
197void QGraphicsLayout::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom)
const
199 Q_D(
const QGraphicsLayout);
200 d->getMargin(left, d->left, QStyle::PM_LayoutLeftMargin);
201 d->getMargin(top, d->top, QStyle::PM_LayoutTopMargin);
202 d->getMargin(right, d->right, QStyle::PM_LayoutRightMargin);
203 d->getMargin(bottom, d->bottom, QStyle::PM_LayoutBottomMargin);
222void QGraphicsLayout::activate()
224 Q_D(QGraphicsLayout);
228 d->activateRecursive(
this);
232 QGraphicsLayoutItem *parentItem =
this;
233 while (parentItem && parentItem->isLayout())
234 parentItem = parentItem->parentLayoutItem();
237 Q_ASSERT(!parentItem->isLayout());
239 if (QGraphicsLayout::instantInvalidatePropagation()) {
240 QGraphicsWidget *parentWidget =
static_cast<QGraphicsWidget*>(parentItem);
241 if (!parentWidget->parentLayoutItem()) {
243 bool wasResized = parentWidget->testAttribute(Qt::WA_Resized);
244 parentWidget->resize(parentWidget->size());
245 parentWidget->setAttribute(Qt::WA_Resized, wasResized);
248 setGeometry(parentItem->contentsRect());
250 setGeometry(parentItem->contentsRect());
251 parentLayoutItem()->updateGeometry();
276void QGraphicsLayout::invalidate()
278 if (QGraphicsLayout::instantInvalidatePropagation()) {
282 QGraphicsLayoutItem *layoutItem =
this;
283 while (layoutItem && layoutItem->isLayout()) {
287 layoutItem->d_func()->sizeHintCacheDirty =
true;
288 layoutItem->d_func()->sizeHintWithConstraintCacheDirty =
true;
289 layoutItem = layoutItem->parentLayoutItem();
292 layoutItem->d_func()->sizeHintCacheDirty =
true;
293 layoutItem->d_func()->sizeHintWithConstraintCacheDirty =
true;
296 bool postIt = layoutItem ? !layoutItem->isLayout() :
false;
299 while (layoutItem && layoutItem->isLayout()
300 &&
static_cast<QGraphicsLayout*>(layoutItem)->d_func()->activated) {
301 static_cast<QGraphicsLayout*>(layoutItem)->d_func()->activated =
false;
302 layoutItem = layoutItem->parentLayoutItem();
304 if (layoutItem && !layoutItem->isLayout()) {
306 QCoreApplication::postEvent(
static_cast<QGraphicsWidget *>(layoutItem),
new QEvent(QEvent::LayoutRequest));
315void QGraphicsLayout::updateGeometry()
317 Q_D(QGraphicsLayout);
318 if (QGraphicsLayout::instantInvalidatePropagation()) {
319 d->activated =
false;
320 QGraphicsLayoutItem::updateGeometry();
322 QGraphicsLayoutItem *parentItem = parentLayoutItem();
326 if (parentItem->isLayout())
327 static_cast<QGraphicsLayout *>(parentItem)->invalidate();
329 parentItem->updateGeometry();
331 QGraphicsLayoutItem::updateGeometry();
332 if (QGraphicsLayoutItem *parentItem = parentLayoutItem()) {
333 if (parentItem->isLayout()) {
334 parentItem->updateGeometry();