summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/io/qdebug.cpp17
-rw-r--r--src/corelib/io/qdebug.h1
-rw-r--r--tests/auto/corelib/io/qdebug/tst_qdebug.cpp41
3 files changed, 59 insertions, 0 deletions
diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp
index 28d8548300..b1ebf097cf 100644
--- a/src/corelib/io/qdebug.cpp
+++ b/src/corelib/io/qdebug.cpp
@@ -663,6 +663,23 @@ QDebug &QDebug::resetFormat()
*/
/*!
+ \since 6.0
+ \fn QDebug &QDebug::operator<<(QUtf8StringView s)
+
+ Writes the string view, \a s, to the stream and returns a reference to the
+ stream.
+
+ Normally, QDebug prints the data inside quotes and transforms control or
+ non-US-ASCII characters to their C escape sequences (\\xAB). This way, the
+ output is always 7-bit clean and the string can be copied from the output
+ and pasted back into C++ sources, if necessary.
+
+ To print non-printable characters without transformation, enable the
+ noquote() functionality. Note that some QDebug backends might not be 8-bit
+ clean.
+*/
+
+/*!
\fn QDebug &QDebug::operator<<(QLatin1String t)
Writes the string, \a t, to the stream and returns a reference to the
diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h
index d127d82711..f730346748 100644
--- a/src/corelib/io/qdebug.h
+++ b/src/corelib/io/qdebug.h
@@ -144,6 +144,7 @@ public:
inline QDebug &operator<<(const QString & t) { putString(t.constData(), uint(t.length())); return maybeSpace(); }
#endif
inline QDebug &operator<<(QStringView s) { putString(s.data(), size_t(s.size())); return maybeSpace(); }
+ inline QDebug &operator<<(QUtf8StringView s) { putByteArray(s.data(), s.size(), ContainsBinary); return maybeSpace(); }
inline QDebug &operator<<(QLatin1String t) { putByteArray(t.latin1(), t.size(), ContainsLatin1); return maybeSpace(); }
inline QDebug &operator<<(const QByteArray & t) { putByteArray(t.constData(), t.size(), ContainsBinary); return maybeSpace(); }
inline QDebug &operator<<(QByteArrayView t) { putByteArray(t.constData(), t.size(), ContainsBinary); return maybeSpace(); }
diff --git a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
index d68cbc5e25..6acc80bdc4 100644
--- a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
+++ b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
@@ -73,6 +73,7 @@ private slots:
void qDebugQChar() const;
void qDebugQString() const;
void qDebugQStringView() const;
+ void qDebugQUtf8StringView() const;
void qDebugQLatin1String() const;
void qDebugQByteArray() const;
void qDebugQByteArrayView() const;
@@ -556,6 +557,46 @@ void tst_QDebug::qDebugQStringView() const
}
}
+void tst_QDebug::qDebugQUtf8StringView() const
+{
+ /* Use a utf8 string. */
+ {
+ QLatin1String file, function;
+ int line = 0;
+ const QUtf8StringView inView = u8"\U0001F609 is ;-)";
+
+ MessageHandlerSetter mhs(myMessageHandler);
+ { qDebug() << inView; }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = QLatin1String(__FILE__); line = __LINE__ - 2; function = QLatin1String(Q_FUNC_INFO);
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromUtf8("\"\\xF0\\x9F\\x98\\x89 is ;-)\""));
+ QCOMPARE(QLatin1String(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QLatin1String(s_function), function);
+ }
+
+ /* Use a null QUtf8StringView. */
+ {
+ QString file, function;
+ int line = 0;
+
+ const QUtf8StringView inView;
+
+ MessageHandlerSetter mhs(myMessageHandler);
+ { qDebug() << inView; }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 2; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QLatin1String("\"\""));
+ QCOMPARE(QLatin1String(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QLatin1String(s_function), function);
+ }
+}
+
void tst_QDebug::qDebugQLatin1String() const
{
QString file, function;