19void QGraphicsLayoutPrivate::reparentChildItems(QGraphicsItem *newParent)
24 for (
int i = 0; i < n; ++i) {
25 QGraphicsLayoutItem *layoutChild = q->itemAt(i);
30 if (layoutChild->isLayout()) {
31 QGraphicsLayout *l =
static_cast<QGraphicsLayout*>(layoutChild);
32 l->d_func()->reparentChildItems(newParent);
33 }
else if (QGraphicsItem *itemChild = layoutChild->graphicsItem()){
34 QGraphicsItem *childParent = itemChild->parentItem();
36 if (childParent && childParent != newParent && itemChild->isWidget() && qt_graphicsLayoutDebug()) {
37 QGraphicsWidget *w =
static_cast<QGraphicsWidget*>(layoutChild);
38 qWarning(
"QGraphicsLayout::addChildLayout: widget %s \"%s\" in wrong parent; moved to correct parent",
39 w->metaObject()->className(), w->objectName().toLocal8Bit().constData());
42 if (childParent != newParent)
43 itemChild->setParentItem(newParent);
48void QGraphicsLayoutPrivate::getMargin(qreal *result, qreal userMargin, QStyle::PixelMetric pm)
const
52 Q_Q(
const QGraphicsLayout);
54 QGraphicsLayoutItem *parent = q->parentLayoutItem();
55 if (userMargin >= 0.0) {
59 }
else if (parent->isLayout()) {
63 if (QGraphicsItem *layoutParentItem = parentItem()) {
64 if (layoutParentItem->isWidget())
65 *result = (qreal)
static_cast<QGraphicsWidget*>(layoutParentItem)->style()->pixelMetric(pm,
nullptr);
70Qt::LayoutDirection QGraphicsLayoutPrivate::visualDirection()
const
72 if (QGraphicsItem *maybeWidget = parentItem()) {
73 if (maybeWidget->isWidget())
74 return static_cast<QGraphicsWidget*>(maybeWidget)->layoutDirection();
76 return QGuiApplication::layoutDirection();
84 for (
int i = lay->count() - 1; i >= 0; --i) {
85 QGraphicsLayoutItem *child = lay->itemAt(i);
86 if (child && child->isLayout()) {
87 if (removeLayoutItemFromLayout(
static_cast<QGraphicsLayout*>(child), layoutItem))
89 }
else if (child == layoutItem) {
108void QGraphicsLayoutPrivate::addChildLayoutItem(QGraphicsLayoutItem *layoutItem)
110 Q_Q(QGraphicsLayout);
111 if (QGraphicsLayoutItem *maybeLayout = layoutItem->parentLayoutItem()) {
112 if (maybeLayout->isLayout())
113 removeLayoutItemFromLayout(
static_cast<QGraphicsLayout*>(maybeLayout), layoutItem);
115 layoutItem->setParentLayoutItem(q);
116 if (layoutItem->isLayout()) {
117 if (QGraphicsItem *parItem = parentItem()) {
118 static_cast<QGraphicsLayout*>(layoutItem)->d_func()->reparentChildItems(parItem);
121 if (QGraphicsItem *item = layoutItem->graphicsItem()) {
122 QGraphicsItem *newParent = parentItem();
123 QGraphicsItem *oldParent = item->parentItem();
124 if (oldParent == newParent || !newParent)
128 if (oldParent && item->isWidget()) {
129 QGraphicsWidget *w =
static_cast<QGraphicsWidget*>(item);
130 qWarning(
"QGraphicsLayout::addChildLayoutItem: %s \"%s\" in wrong parent; moved to correct parent",
131 w->metaObject()->className(), w->objectName().toLocal8Bit().constData());
135 item->setParentItem(newParent);
140void QGraphicsLayoutPrivate::activateRecursive(QGraphicsLayoutItem *item)
142 if (item->isLayout()) {
143 QGraphicsLayout *layout =
static_cast<QGraphicsLayout *>(item);
144 if (layout->d_func()->activated) {
145 if (QGraphicsLayout::instantInvalidatePropagation()) {
148 layout->invalidate();
152 for (
int i = layout->count() - 1; i >= 0; --i) {
153 QGraphicsLayoutItem *childItem = layout->itemAt(i);
155 activateRecursive(childItem);
157 layout->d_func()->activated =
true;