diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp index 0180fbb6ff..0718300d37 100644 --- a/src/gui/text/qtextdocument_p.cpp +++ b/src/gui/text/qtextdocument_p.cpp @@ -1305,10 +1305,14 @@ void QTextDocumentPrivate::adjustDocumentChangesAndCursors(int from, int addedOr QString QTextDocumentPrivate::plainText() const { QString result; - result.reserve(length()); - const auto view = QStringView(text); - for (auto f : *this) - result += view.sliced(f->stringPosition, f->size_array[0]); + result.resize(length()); + const QChar *text_unicode = text.unicode(); + QChar *data = result.data(); + for (QTextDocumentPrivate::FragmentIterator it = begin(); it != end(); ++it) { + const QTextFragmentData *f = *it; + ::memcpy(data, text_unicode + f->stringPosition, f->size_array[0] * sizeof(QChar)); + data += f->size_array[0]; + } // remove trailing block separator result.chop(1); return result;