QT_BEGIN_NAMESPACE /*! \internal \a mw is the new parent. all items in the layout will be a child of \a mw. */ void QGraphicsLayoutPrivate::reparentChildItems(QGraphicsItem *newParent) { Q_Q(QGraphicsLayout); int n = q->count(); //bool mwVisible = mw && mw->isVisible(); for (int i = 0; i < n; ++i) { QGraphicsLayoutItem *layoutChild = q->itemAt(i); if (!layoutChild) { // Skip stretch items continue; } if (layoutChild->isLayout()) { QGraphicsLayout *l = static_cast<QGraphicsLayout*>(layoutChild); l->d_func()->reparentChildItems(newParent); } else if (QGraphicsItem *itemChild = layoutChild->graphicsItem()){ QGraphicsItem *childParent = itemChild->parentItem(); #ifdef QT_DEBUG if (childParent && childParent != newParent && itemChild->isWidget() && qt_graphicsLayoutDebug()) { QGraphicsWidget *w = static_cast<QGraphicsWidget*>(layoutChild); qWarning("QGraphicsLayout::addChildLayout: widget %s \"%s\" in wrong parent; moved to correct parent", w->metaObject()->className(), w->objectName().toLocal8Bit().constData()); } #endif if (childParent != newParent) itemChild->setParentItem(newParent); } } }
/*! \internal This function is called from subclasses to add a layout item \a layoutItem to a layout. It takes care of automatically reparenting graphics items, if needed. If \a layoutItem is a is already in a layout, it will remove it from that layout. */ void QGraphicsLayoutPrivate::addChildLayoutItem(QGraphicsLayoutItem *layoutItem) { Q_Q(QGraphicsLayout); if (QGraphicsLayoutItem *maybeLayout = layoutItem->parentLayoutItem()) { if (maybeLayout->isLayout()) removeLayoutItemFromLayout(static_cast<QGraphicsLayout*>(maybeLayout), layoutItem); } layoutItem->setParentLayoutItem(q); if (layoutItem->isLayout()) { if (QGraphicsItem *parItem = parentItem()) { static_cast<QGraphicsLayout*>(layoutItem)->d_func()->reparentChildItems(parItem); } } else { if (QGraphicsItem *item = layoutItem->graphicsItem()) { QGraphicsItem *newParent = parentItem(); QGraphicsItem *oldParent = item->parentItem(); if (oldParent == newParent || !newParent) return; #ifdef QT_DEBUG if (oldParent && item->isWidget()) { QGraphicsWidget *w = static_cast<QGraphicsWidget*>(item); qWarning("QGraphicsLayout::addChildLayoutItem: %s \"%s\" in wrong parent; moved to correct parent", w->metaObject()->className(), w->objectName().toLocal8Bit().constData()); } #endif item->setParentItem(newParent); } } }
/*! \internal \a mw is the new parent. all items in the layout will be a child of \a mw. */ void QGraphicsLayoutPrivate::reparentChildWidgets(QGraphicsWidget *mw) { Q_Q(QGraphicsLayout); int n = q->count(); //bool mwVisible = mw && mw->isVisible(); for (int i = 0; i < n; ++i) { QGraphicsLayoutItem *item = q->itemAt(i); if (item->isLayout()) { QGraphicsLayout *l = static_cast<QGraphicsLayout*>(item); l->d_func()->reparentChildWidgets(mw); } else { QGraphicsWidget *w = static_cast<QGraphicsWidget*>(item); QGraphicsWidget *pw = w->parentWidget(); #ifdef QT_DEBUG if (pw && pw != mw && qt_graphicsLayoutDebug()) { qWarning("QGraphicsLayout::addChildLayout: widget %s \"%s\" in wrong parent; moved to correct parent", w->metaObject()->className(), w->objectName().toLocal8Bit().constData()); } #endif //bool needShow = mwVisible && !(w->isHidden() && w->testAttribute(Qt::WA_WState_ExplicitShowHide)); if (pw != mw) w->setParentItem(mw); //if (needShow) // QMetaObject::invokeMethod(w, "_q_showIfNotHidden", Qt::QueuedConnection); //show later } } }
void HbXmlLoaderBaseActions::addToObjectMap( QList<QGraphicsItem *> objects ) { for ( int i = 0; i < objects.size(); i++ ) { if ( objects.at(i)->isWidget() ) { QGraphicsWidget *widget = static_cast<QGraphicsWidget *>( objects.at(i) ); ObjectMapItem item; item.mObject = widget; item.mType = HbXml::WIDGET; item.mOwned = false; mObjectMap.insert( widget->objectName(), item ); addToObjectMap( widget->childItems() ); } } }
bool MTester::isLayoutContains ( QGraphicsLayout *layout, QGraphicsLayoutItem *item) { bool found = false; #if 0 SYS_DEBUG ("*** layout = %p", layout); SYS_DEBUG ("*** item = %p", item); SYS_DEBUG ("*** count = %d", layout->count()); #endif for (int n = 0; n < layout->count(); ++n) { QGraphicsLayoutItem *child = layout->itemAt (n); if (item == child) found = true; #if 0 QGraphicsWidget* widget = (QGraphicsWidget*) child; SYS_DEBUG ("**********************************************"); SYS_DEBUG ("*** child = %p", child); SYS_DEBUG ("*** widget = %p", child->graphicsItem ()); SYS_DEBUG ("*** name = %s", SYS_STR(widget->objectName())); #endif } if (!found) { QGraphicsWidget* widget = (QGraphicsWidget*) item; SYS_WARNING ("Layout at %p should contain widget %p/%s.", layout, item, SYS_STR(widget->objectName())); } return found; }