--- a/src/quicktemplates2/qquickdrawer.cpp
+++ b/src/quicktemplates2/qquickdrawer.cpp
@@ -198,7 +198,7 @@ qreal QQuickDrawerPrivate::positionAt(const QPointF &point) const
     if (!window)
         return 0;
 
-    switch (edge) {
+    switch (effectiveEdge()) {
     case Qt::TopEdge:
         return point.y() / q->height();
     case Qt::LeftEdge:
@@ -279,9 +279,9 @@ void QQuickDrawerPrivate::resizeOverlay()
     dimmer->setSize(geometry.size());
 }
 
-static bool isWithinDragMargin(const QQuickDrawer *drawer, const QPointF &pos)
+bool QQuickDrawerPrivate::isWithinDragMargin(const QQuickDrawer *drawer, const QPointF &pos) const
 {
-    switch (drawer->edge()) {
+    switch (effectiveEdge()) {
     case Qt::LeftEdge:
         return pos.x() <= drawer->dragMargin();
     case Qt::RightEdge:
@@ -352,10 +352,11 @@ bool QQuickDrawerPrivate::grabMouse(QQuickItem *item, QMouseEvent *event)
     // larger threshold to avoid being too eager to steal touch (QTBUG-50045)
     const int threshold = qMax(20, QGuiApplication::styleHints()->startDragDistance() + 5);
     bool overThreshold = false;
+    Qt::Edge effEdge = effectiveEdge();
     if (position > 0 || dragMargin > 0) {
         const bool xOverThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.x() - pressPoint.x(), Qt::XAxis, event, threshold);
         const bool yOverThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.y() - pressPoint.y(), Qt::YAxis, event, threshold);
-        if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
+        if (effEdge == Qt::LeftEdge || effEdge == Qt::RightEdge)
             overThreshold = xOverThreshold && !yOverThreshold;
         else
             overThreshold = yOverThreshold && !xOverThreshold;
@@ -363,7 +364,7 @@ bool QQuickDrawerPrivate::grabMouse(QQuickItem *item, QMouseEvent *event)
 
     // Don't be too eager to steal presses outside the drawer (QTBUG-53929)
     if (overThreshold && qFuzzyCompare(position, qreal(1.0)) && !contains(movePoint)) {
-        if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
+        if (effEdge == Qt::LeftEdge || effEdge == Qt::RightEdge)
             overThreshold = qAbs(movePoint.x() - q->width()) < dragMargin;
         else
             overThreshold = qAbs(movePoint.y() - q->height()) < dragMargin;
@@ -490,9 +491,9 @@ bool QQuickDrawerPrivate::handleRelease(QQuickItem *item, const QPointF &point,
     }
 
     velocityCalculator.stopMeasuring(point, timestamp);
-
+    Qt::Edge effEdge = effectiveEdge();
     qreal velocity = 0;
-    if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
+    if (effEdge == Qt::LeftEdge || effEdge == Qt::RightEdge)
         velocity = velocityCalculator.velocity().x();
     else
         velocity = velocityCalculator.velocity().y();
@@ -505,7 +506,7 @@ bool QQuickDrawerPrivate::handleRelease(QQuickItem *item, const QPointF &point,
     // - bottom/right edge: negative velocity opens, positive velocity closes
     //
     // => invert the velocity for bottom and right edges, for the threshold comparison below
-    if (edge == Qt::RightEdge || edge == Qt::BottomEdge)
+    if (effEdge == Qt::RightEdge || effEdge == Qt::BottomEdge)
         velocity = -velocity;
 
     if (position > 0.7 || velocity > openCloseVelocityThreshold) {
@@ -513,7 +514,7 @@ bool QQuickDrawerPrivate::handleRelease(QQuickItem *item, const QPointF &point,
     } else if (position < 0.3 || velocity < -openCloseVelocityThreshold) {
         transitionManager.transitionExit();
     } else {
-        switch (edge) {
+        switch (effEdge) {
         case Qt::LeftEdge:
             if (point.x() - pressPoint.x() > 0)
                 transitionManager.transitionEnter();
@@ -650,6 +651,21 @@ Qt::Edge QQuickDrawer::edge() const
     return d->edge;
 }
 
+Qt::Edge QQuickDrawerPrivate::effectiveEdge() const
+{
+    const auto o = window->contentOrientation();
+    if (edge == Qt::LeftEdge) {
+        if (o == Qt::InvertedPortraitOrientation)
+            return Qt::RightEdge;
+        if (o == Qt::LandscapeOrientation)
+            return Qt::TopEdge;
+        if (o == Qt::InvertedLandscapeOrientation)
+            return Qt::BottomEdge;
+        return edge;
+    }
+    return edge;
+}
+
 void QQuickDrawer::setEdge(Qt::Edge edge)
 {
     Q_D(QQuickDrawer);
diff --git a/src/quicktemplates2/qquickdrawer_p_p.h b/src/quicktemplates2/qquickdrawer_p_p.h
index 5f1086de9..343dd4263 100644
--- a/src/quicktemplates2/qquickdrawer_p_p.h
+++ b/src/quicktemplates2/qquickdrawer_p_p.h
@@ -88,6 +88,8 @@ public:
     bool prepareExitTransition() override;
 
     bool setEdge(Qt::Edge edge);
+    Qt::Edge effectiveEdge() const;
+    bool isWithinDragMargin(const QQuickDrawer *q, const QPointF &point) const;
 
     Qt::Edge edge = Qt::LeftEdge;
     qreal offset = 0;

