src/gui/graphicsview/qgraphicsgridlayout.cpp
changeset 33 3e2da88830cd
parent 18 2f34d5167611
child 37 758a864f9613
--- a/src/gui/graphicsview/qgraphicsgridlayout.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsgridlayout.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -94,14 +94,13 @@
 #endif
 };
 
+Q_GLOBAL_STATIC(QWidget, globalStyleInfoWidget);
+
 QLayoutStyleInfo QGraphicsGridLayoutPrivate::styleInfo() const
 {
-    static QWidget *wid = 0;
-    if (!wid)
-        wid = new QWidget;
     QGraphicsItem *item = parentItem();
     QStyle *style = (item && item->isWidget()) ? static_cast<QGraphicsWidget*>(item)->style() : QApplication::style();
-    return QLayoutStyleInfo(style, wid);
+    return QLayoutStyleInfo(style, globalStyleInfoWidget());
 }
 
 /*!
@@ -572,6 +571,18 @@
         if (QGraphicsLayoutItem *layoutItem = gridItem->layoutItem())
             layoutItem->setParentLayoutItem(0);
         d->engine.removeItem(gridItem);
+
+        // recalculate rowInfo.count if we remove an item that is on the right/bottommost row
+        for (int j = 0; j < NOrientations; ++j) {
+            // 0: Hor, 1: Ver
+            const Qt::Orientation orient = (j == 0 ? Qt::Horizontal : Qt::Vertical);
+            const int oldCount = d->engine.rowCount(orient);
+            if (gridItem->lastRow(orient) == oldCount - 1) {
+                const int newCount = d->engine.effectiveLastRow(orient) + 1;
+                d->engine.removeRows(newCount, oldCount - newCount, orient);
+            }
+        }
+
         delete gridItem;
         invalidate();
     }