diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index ad904a25792777183bb8cfe5226a85e4557484e2..038025856c9bcf17771ad38644a993a640115d8c 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -2070,7 +2070,7 @@ QRectF QQuickText::boundingRect() const
     Q_D(const QQuickText);
 
     QRectF rect = d->layedOutTextRect;
-    rect.moveLeft(QQuickTextUtil::alignedX(rect.width(), width(), d->hAlign));
+    rect.moveLeft(QQuickTextUtil::alignedX(rect.width(), width(), effectiveHAlign()));
     rect.moveTop(QQuickTextUtil::alignedY(rect.height(), height(), d->vAlign));
 
     if (d->style != Normal)
@@ -2207,11 +2207,11 @@ QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data
     const QColor linkColor = QColor::fromRgba(d->linkColor);
 
     if (d->richText) {
-        const qreal dx = QQuickTextUtil::alignedX(d->layedOutTextRect.width(), width(), d->hAlign);
+        const qreal dx = QQuickTextUtil::alignedX(d->layedOutTextRect.width(), width(), effectiveHAlign());
         d->ensureDoc();
         node->addTextDocument(QPointF(dx, dy), d->extra->doc, color, d->style, styleColor, linkColor);
     } else if (d->layedOutTextRect.width() > 0) {
-        const qreal dx = QQuickTextUtil::alignedX(d->lineWidth, width(), d->hAlign);
+        const qreal dx = QQuickTextUtil::alignedX(d->lineWidth, width(), effectiveHAlign());
         int unelidedLineCount = d->lineCount;
         if (d->elideLayout)
             unelidedLineCount -= 1;
@@ -2483,7 +2483,7 @@ QString QQuickTextPrivate::anchorAt(const QPointF &mousePos) const
             link = anchorAt(elideLayout, translatedMousePos);
         return link;
     } else if (richText && extra.isAllocated() && extra->doc) {
-        translatedMousePos.rx() -= QQuickTextUtil::alignedX(layedOutTextRect.width(), q->width(), hAlign);
+        translatedMousePos.rx() -= QQuickTextUtil::alignedX(layedOutTextRect.width(), q->width(), q->effectiveHAlign());
         return extra->doc->documentLayout()->anchorAt(translatedMousePos);
     }
     return QString();
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
index 78e03be9c2c38c2d8993cd6c9b8a6368e9e2ea92..6a183231908ad4aa55195c9fa21f2ae085080584 100644
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
@@ -1694,6 +1694,12 @@ void tst_qquicktext::linkInteraction_data()
                 << (PointVector() << metrics.characterRectangle(18, Qt::AlignRight, Qt::AlignBottom).center())
                 << singleLineLink
                 << singleLineLink << singleLineLink;
+        QTest::newRow("click on mirrored link")
+                << singleLineText << 240.
+                << "horizontalAlignment: Text.AlignLeft; LayoutMirroring.enabled: true"
+                << (PointVector() << metrics.characterRectangle(18, Qt::AlignRight, Qt::AlignTop).center())
+                << singleLineLink
+                << singleLineLink << singleLineLink;
         QTest::newRow("click on center aligned link")
                 << singleLineText << 240.
                 << "horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter"
@@ -2515,6 +2521,18 @@ void tst_qquicktext::boundingRect()
     QCOMPARE(text->boundingRect().width(), line.naturalTextWidth());
     QCOMPARE(text->boundingRect().height(), line.height());
 
+    QQuickItemPrivate::get(text)->setLayoutMirror(true);
+    QCOMPARE(text->boundingRect().x(), qreal(0));
+    QCOMPARE(text->boundingRect().y(), qreal(0));
+    QCOMPARE(text->boundingRect().width(), line.naturalTextWidth());
+    QCOMPARE(text->boundingRect().height(), line.height());
+
+    text->setHAlign(QQuickText::AlignLeft);
+    QCOMPARE(text->boundingRect().x(), text->width() - line.naturalTextWidth());
+    QCOMPARE(text->boundingRect().y(), qreal(0));
+    QCOMPARE(text->boundingRect().width(), line.naturalTextWidth());
+    QCOMPARE(text->boundingRect().height(), line.height());
+
     text->setWrapMode(QQuickText::Wrap);
     QCOMPARE(text->boundingRect().right(), text->width());
     QCOMPARE(text->boundingRect().y(), qreal(0));