diff --git a/src/layouts/qquickgridlayoutengine_p.h b/src/layouts/qquickgridlayoutengine_p.h
index 67b0257bc716394d9efcc3c51c47afc7dd0e367a..29317ffbbb8d89c63c9c6196b324bcb70d14dbe9 100644
--- a/src/layouts/qquickgridlayoutengine_p.h
+++ b/src/layouts/qquickgridlayoutengine_p.h
@@ -111,8 +111,9 @@ public:
 
     void setGeometry(const QRectF &rect)
     {
-        m_item->setPosition(rect.topLeft());
-        m_item->setSize(rect.size());
+        const QRect r(rect.toRect());
+        m_item->setPosition(r.topLeft());
+        m_item->setSize(r.size());
     }
 
     QQuickItem *layoutItem() const { return m_item; }
diff --git a/tests/auto/controls/data/tst_rowlayout.qml b/tests/auto/controls/data/tst_rowlayout.qml
index 1b9573e0c4d17b387f9dabe262ae9eace69ee26c..505b35171b93a74f8866174a70e826e7260c6e44 100644
--- a/tests/auto/controls/data/tst_rowlayout.qml
+++ b/tests/auto/controls/data/tst_rowlayout.qml
@@ -543,5 +543,36 @@ Item {
 
             layout.destroy();
         }
+
+
+        Component {
+            id: layout_alignToPixelGrid_Component
+            RowLayout {
+                spacing: 2
+                Rectangle {
+                    implicitWidth: 10
+                    implicitHeight: 10
+                    Layout.alignment: Qt.AlignVCenter
+                }
+                Rectangle {
+                    implicitWidth: 10
+                    implicitHeight: 10
+                    Layout.alignment: Qt.AlignVCenter
+                }
+            }
+        }
+        function test_alignToPixelGrid()
+        {
+            var layout = layout_alignToPixelGrid_Component.createObject(container)
+            layout.width  = 21
+            layout.height = 21
+            var r0 = layout.children[0]
+            compare(r0.x, 0) // 0.0
+            compare(r0.y, 6) // 5.5
+            var r1 = layout.children[1]
+            compare(r1.x, 12) // 11.5
+            compare(r1.y, 6) // 5.5
+            layout.destroy();
+        }
     }
 }