diff --git a/src/widgets/graphicsview/qgridlayoutengine.cpp b/src/widgets/graphicsview/qgridlayoutengine.cpp index b80612bc4740a0a5aea6e7bed7e653738f719f8a..4f43a0a4ac1c9cfba3677ef70213fadb9c52075f 100644 --- a/src/widgets/graphicsview/qgridlayoutengine.cpp +++ b/src/widgets/graphicsview/qgridlayoutengine.cpp @@ -291,7 +291,7 @@ void QGridLayoutRowData::calculateGeometries(int start, int end, qreal targetSiz int stretch = stretches[start + i]; if (sumStretches == 0) { - if (hasIgnoreFlag) { + if (hasIgnoreFlag || sizes[i] == 0.0) { factors[i] = (stretch < 0) ? 1.0 : 0.0; } else { factors[i] = (stretch < 0) ? sizes[i] : 0.0; diff --git a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp index 41e5ed466c10d719ad3f7deb71f22a5f0599384d..8c8f27d635f5b56feffbc3355600709e01f219bb 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp @@ -1884,6 +1884,18 @@ void tst_QGraphicsGridLayout::defaultStretchFactors_data() << QSizeF(10,10) << QSizeF(10,10) << QSizeF(10,10) ); + QTest::newRow("preferredsizeIsZero") << (ItemList() + << ItemDesc(0,0) + .preferredSizeHint(QSizeF(0,10)) + << ItemDesc(0,1) + .preferredSizeHint(QSizeF(10,10)) + .maxSize(QSizeF(20, 10)) + ) + << QSizeF(30, 10) + << (SizeList() + << QSizeF(10,10) << QSizeF(20,10) + ); + QTest::newRow("ignoreitem01") << (ItemList() << ItemDesc(0,0) .preferredSizeHint(QSizeF(10,10))