summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qstring.cpp18
-rw-r--r--src/corelib/tools/qstring.h1
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring.cpp26
3 files changed, 42 insertions, 3 deletions
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index f4240e964f..5ec0b63f8e 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -1507,6 +1507,24 @@ QString &QString::append(const QString &str)
/*!
\overload append()
+ \since 5.0
+
+ Appends \a len characters from the QChar array \a str to this string.
+*/
+QString &QString::append(const QChar *str, int len)
+{
+ if (str && len > 0) {
+ if (d->ref.isShared() || uint(d->size + len) + 1u > d->alloc)
+ reallocData(uint(d->size + len) + 1u, true);
+ memcpy(d->data() + d->size, str, len * sizeof(QChar));
+ d->size += len;
+ d->data()[d->size] = '\0';
+ }
+ return *this;
+}
+
+/*!
+ \overload append()
Appends the Latin-1 string \a str to this string.
*/
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index 2edfc04502..dfc974f72e 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -391,6 +391,7 @@ public:
inline QString &insert(int i, const QString &s) { return insert(i, s.constData(), s.length()); }
QString &insert(int i, QLatin1String s);
QString &append(QChar c);
+ QString &append(const QChar *uc, int len);
QString &append(const QString &s);
QString &append(const QStringRef &s);
QString &append(QLatin1String s);
diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
index 7476fa0c38..3891a715f7 100644
--- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
@@ -2012,9 +2012,29 @@ void tst_QString::insert()
void tst_QString::append()
{
- QString a;
- a = "<>ABCABCABCABC";
- QCOMPARE(a.append(">"),(QString)"<>ABCABCABCABC>");
+ {
+ QString a;
+ a = "<>ABCABCABCABC";
+ QCOMPARE(a.append(">"),QString("<>ABCABCABCABC>"));
+ }
+
+ {
+ QString a;
+ static const QChar unicode[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
+ a.append(unicode, sizeof unicode / sizeof *unicode);
+ QCOMPARE(a, QLatin1String("Hello, World!"));
+ static const QChar nl('\n');
+ a.append(&nl, 1);
+ QCOMPARE(a, QLatin1String("Hello, World!\n"));
+ a.append(unicode, sizeof unicode / sizeof *unicode);
+ QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+ a.append(unicode, 0); // no-op
+ QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+ a.append(unicode, -1); // no-op
+ QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+ a.append(0, 1); // no-op
+ QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
+ }
}
void tst_QString::append_bytearray_data()