diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index 37b103613d5c5349691b891deb98bab14037db43..37e94cddc06bd86386d069e2a1a59fd8589cfcf6 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -2303,12 +2303,15 @@ void QQuickTextInput::resetPasswordMaskDelay()
    this property holds the text visible to the user, while
    the \l text property holds the actual entered text.
 
+   \note Unlike the TextInput::text property, this contains
+   partial text input from an input method.
+
    \readonly
 */
 QString QQuickTextInput::displayText() const
 {
     Q_D(const QQuickTextInput);
-    return d->m_textLayout.text();
+    return d->m_textLayout.text().insert(d->m_textLayout.preeditAreaPosition(), d->m_textLayout.preeditAreaText());
 }
 
 /*!
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
index e5ef83ba323ea152b955e3b4b438bfb8e675d1f1..c50923b32fb845d77767f47bc6814fc0ca7e4c22 100644
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
@@ -2234,25 +2234,34 @@ void tst_qquicktextinput::inputMethods()
     QTRY_COMPARE(qGuiApp->focusObject(), input);
     QGuiApplication::sendEvent(input, &event);
     QCOMPARE(input->text(), QString("My Hello world!"));
+    QCOMPARE(input->displayText(), QString("My Hello world!"));
 
     input->setCursorPosition(2);
     event.setCommitString("Your", -2, 2);
     QGuiApplication::sendEvent(input, &event);
     QCOMPARE(input->text(), QString("Your Hello world!"));
+    QCOMPARE(input->displayText(), QString("Your Hello world!"));
     QCOMPARE(input->cursorPosition(), 4);
 
     input->setCursorPosition(7);
     event.setCommitString("Goodbye", -2, 5);
     QGuiApplication::sendEvent(input, &event);
     QCOMPARE(input->text(), QString("Your Goodbye world!"));
+    QCOMPARE(input->displayText(), QString("Your Goodbye world!"));
     QCOMPARE(input->cursorPosition(), 12);
 
     input->setCursorPosition(8);
     event.setCommitString("Our", -8, 4);
     QGuiApplication::sendEvent(input, &event);
     QCOMPARE(input->text(), QString("Our Goodbye world!"));
+    QCOMPARE(input->displayText(), QString("Our Goodbye world!"));
     QCOMPARE(input->cursorPosition(), 7);
 
+    QInputMethodEvent preeditEvent("PREEDIT", QList<QInputMethodEvent::Attribute>());
+    QGuiApplication::sendEvent(input, &preeditEvent);
+    QCOMPARE(input->text(), QString("Our Goodbye world!"));
+    QCOMPARE(input->displayText(), QString("Our GooPREEDITdbye world!"));
+
     // input should reset selection even if replacement parameters are out of bounds
     input->setText("text");
     input->setCursorPosition(0);
@@ -2260,6 +2269,8 @@ void tst_qquicktextinput::inputMethods()
     event.setCommitString("replacement", -input->text().length(), input->text().length());
     QGuiApplication::sendEvent(input, &event);
     QCOMPARE(input->selectionStart(), input->selectionEnd());
+    QCOMPARE(input->text(), QString("replacement"));
+    QCOMPARE(input->displayText(), QString("replacement"));
 
     QInputMethodQueryEvent enabledQueryEvent(Qt::ImEnabled);
     QGuiApplication::sendEvent(input, &enabledQueryEvent);