diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp
index d0c4aad64b2d070bd4116f05701d4870a2b29666..e22c84879bd7a735c8debbb2831041d3b17590d7 100644
--- a/src/quick/items/qquicktextcontrol.cpp
+++ b/src/quick/items/qquicktextcontrol.cpp
@@ -298,6 +298,8 @@ void QQuickTextControlPrivate::setContent(Qt::TextFormat format, const QString &
     bool previousUndoRedoState = doc->isUndoRedoEnabled();
     doc->setUndoRedoEnabled(false);
 
+    const int oldCursorPos = cursor.position();
+
     // avoid multiple textChanged() signals being emitted
     qmlobject_disconnect(doc, QTextDocument, SIGNAL(contentsChanged()), q, QQuickTextControl, SIGNAL(textChanged()));
 
@@ -341,7 +343,8 @@ void QQuickTextControlPrivate::setContent(Qt::TextFormat format, const QString &
     doc->setModified(false);
 
     q->updateCursorRectangle(true);
-    emit q->cursorPositionChanged();
+    if (cursor.position() != oldCursorPos)
+        emit q->cursorPositionChanged();
 }
 
 void QQuickTextControlPrivate::setCursorPosition(const QPointF &pos)