diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp index be26b2785e..9da290974b 100644 --- a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp +++ b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp @@ -225,7 +225,7 @@ void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) if (anchorPrivate->hasSize) { // Anchor has user-defined size prefSizeHint = anchorPrivate->preferredSize; - } else { + } else if (styleInfo) { // Fetch size information from style const Qt::Orientation orient = QGraphicsAnchorLayoutPrivate::edgeOrientation(from->m_edge); qreal s = styleInfo->defaultSpacing(orient); @@ -241,6 +241,8 @@ void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) s = 0; } prefSizeHint = s; + } else { + prefSizeHint = 0; } } diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index e426e09adf..bad40b0cff 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -2652,23 +2652,25 @@ void QGraphicsItemPrivate::setEnabledHelper(bool newEnabled, bool explicitly, bo // Certain properties are dropped when an item is disabled. if (!newEnabled) { - if (scene && scene->mouseGrabberItem() == q_ptr) - q_ptr->ungrabMouse(); - if (q_ptr->hasFocus()) { - // Disabling the closest non-panel ancestor of the focus item - // causes focus to pop to the next item, otherwise it's cleared. - QGraphicsItem *focusItem = scene->focusItem(); - bool clear = true; - if (isWidget && !focusItem->isPanel() && q_ptr->isAncestorOf(focusItem)) { - do { - if (focusItem == q_ptr) { - clear = !static_cast(q_ptr)->focusNextPrevChild(true); - break; - } - } while ((focusItem = focusItem->parentWidget()) && !focusItem->isPanel()); + if (scene) { + if (scene->mouseGrabberItem() == q_ptr) + q_ptr->ungrabMouse(); + if (q_ptr->hasFocus()) { + // Disabling the closest non-panel ancestor of the focus item + // causes focus to pop to the next item, otherwise it's cleared. + QGraphicsItem *focusItem = scene->focusItem(); + bool clear = true; + if (isWidget && !focusItem->isPanel() && q_ptr->isAncestorOf(focusItem)) { + do { + if (focusItem == q_ptr) { + clear = !static_cast(q_ptr)->focusNextPrevChild(true); + break; + } + } while ((focusItem = focusItem->parentWidget()) && !focusItem->isPanel()); + } + if (clear) + q_ptr->clearFocus(); } - if (clear) - q_ptr->clearFocus(); } if (q_ptr->isSelected()) q_ptr->setSelected(false); @@ -7149,14 +7151,14 @@ void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if ((item->flags() & ItemIsMovable) && !QGraphicsItemPrivate::movableAncestorIsSelected(item)) { QPointF currentParentPos; QPointF buttonDownParentPos; - if (item->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorIgnoresTransformations) { + if (view && (item->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorIgnoresTransformations)) { // Items whose ancestors ignore transformations need to // map screen coordinates to local coordinates, then map // those to the parent. QTransform viewToItemTransform = (item->deviceTransform(view->viewportTransform())).inverted(); currentParentPos = mapToParent(viewToItemTransform.map(QPointF(view->mapFromGlobal(event->screenPos())))); buttonDownParentPos = mapToParent(viewToItemTransform.map(QPointF(view->mapFromGlobal(event->buttonDownScreenPos(Qt::LeftButton))))); - } else if (item->flags() & ItemIgnoresTransformations) { + } else if (view && (item->flags() & ItemIgnoresTransformations)) { // Root items that ignore transformations need to // calculate their diff by mapping viewport coordinates // directly to parent coordinates.