QDebug: Add resetFormat()

Similar to QTextStream::reset(), this resets the stream format to the
defaults. Its primary use is inside custom operator<< implementations,
where you'd want to have a fixed format regardless of the current
stream state.

Change-Id: I421d76c61f164579bb90cf4195cc5376e2dcf0f3
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
This commit is contained in:
Kai Koehne 2014-06-20 14:44:48 +02:00
parent 45854c75aa
commit 87aceebf42
3 changed files with 37 additions and 3 deletions

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@ -151,6 +151,21 @@ QDebug::~QDebug()
very fast and never fails.
*/
/*!
Resets the stream formatting options, bringing it back to its original constructed state.
\sa space(), quote()
\since 5.4
*/
QDebug &QDebug::resetFormat()
{
stream->ts.reset();
stream->space = true;
if (stream->context.version > 1)
stream->flags = 0;
return *this;
}
/*!
\fn QDebug &QDebug::space()

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@ -93,6 +93,8 @@ public:
~QDebug();
inline void swap(QDebug &other) { qSwap(stream, other.stream); }
QDebug &resetFormat();
inline QDebug &space() { stream->space = true; stream->ts << ' '; return *this; }
inline QDebug &nospace() { stream->space = false; return *this; }
inline QDebug &maybeSpace() { if (stream->space) stream->ts << ' '; return *this; }

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the test suite of the Qt Toolkit.
@ -64,6 +64,7 @@ private slots:
void qDebugQLatin1String() const;
void qDebugQByteArray() const;
void textStreamModifiers() const;
void resetFormat() const;
void defaultMessagehandler() const;
void threadSafety() const;
};
@ -383,6 +384,22 @@ void tst_QDebug::textStreamModifiers() const
QCOMPARE(QString::fromLatin1(s_function), function);
}
void tst_QDebug::resetFormat() const
{
MessageHandlerSetter mhs(myMessageHandler);
{
QDebug d = qDebug();
d.nospace().noquote() << hex << int(0xf);
d.resetFormat() << int(0xf) << QStringLiteral("foo");
}
QString file = __FILE__; int line = __LINE__ - 4; QString function = Q_FUNC_INFO;
QCOMPARE(s_msgType, QtDebugMsg);
QCOMPARE(s_msg, QString::fromLatin1("f15 \"foo\""));
QCOMPARE(QString::fromLatin1(s_file), file);
QCOMPARE(s_line, line);
QCOMPARE(QString::fromLatin1(s_function), function);
}
void tst_QDebug::defaultMessagehandler() const
{
MessageHandlerSetter mhs(0); // set 0, should set default handler