QDebug: Improve QDebug stream operator for QFlags
Use the built-in hex, showbase manipulator to format the number in hex. Also, apply nospace() only once. Change-Id: Id4b3d5f082ad13f52c8711408d7ec609bec3a621 Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
This commit is contained in:
parent
b795e8d7c2
commit
5b0be0c217
@ -259,21 +259,21 @@ inline QDebug operator<<(QDebug debug, const QContiguousCache<T> &cache)
|
||||
template <class T>
|
||||
inline QDebug operator<<(QDebug debug, const QFlags<T> &flags)
|
||||
{
|
||||
const bool oldSetting = debug.autoInsertSpaces();
|
||||
debug.nospace() << "QFlags(";
|
||||
QDebugStateSaver saver(debug);
|
||||
debug.resetFormat();
|
||||
debug.nospace() << "QFlags(" << hex << showbase;
|
||||
bool needSeparator = false;
|
||||
for (uint i = 0; i < sizeof(T) * 8; ++i) {
|
||||
if (flags.testFlag(T(1 << i))) {
|
||||
if (needSeparator)
|
||||
debug.nospace() << '|';
|
||||
debug << '|';
|
||||
else
|
||||
needSeparator = true;
|
||||
debug.nospace() << "0x" << QByteArray::number(typename QFlags<T>::Int(1) << i, 16).constData();
|
||||
debug << (typename QFlags<T>::Int(1) << i);
|
||||
}
|
||||
}
|
||||
debug << ')';
|
||||
debug.setAutoInsertSpaces(oldSetting);
|
||||
return debug.maybeSpace();
|
||||
return debug;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -63,6 +63,7 @@ private slots:
|
||||
void qDebugQStringRef() const;
|
||||
void qDebugQLatin1String() const;
|
||||
void qDebugQByteArray() const;
|
||||
void qDebugQFlags() const;
|
||||
void textStreamModifiers() const;
|
||||
void resetFormat() const;
|
||||
void defaultMessagehandler() const;
|
||||
@ -395,6 +396,28 @@ void tst_QDebug::qDebugQByteArray() const
|
||||
QCOMPARE(QString::fromLatin1(s_function), function);
|
||||
}
|
||||
|
||||
enum TestEnum {
|
||||
Flag1 = 0x1,
|
||||
Flag2 = 0x10
|
||||
};
|
||||
|
||||
Q_DECLARE_FLAGS(TestFlags, TestEnum)
|
||||
|
||||
void tst_QDebug::qDebugQFlags() const
|
||||
{
|
||||
QFlags<TestEnum> flags(Flag1 | Flag2);
|
||||
|
||||
MessageHandlerSetter mhs(myMessageHandler);
|
||||
{ qDebug() << flags; }
|
||||
QString file = __FILE__; int line = __LINE__ - 1; QString function = Q_FUNC_INFO;
|
||||
QCOMPARE(s_msgType, QtDebugMsg);
|
||||
QCOMPARE(s_msg, QString::fromLatin1("QFlags(0x1|0x10)"));
|
||||
QCOMPARE(QString::fromLatin1(s_file), file);
|
||||
QCOMPARE(s_line, line);
|
||||
QCOMPARE(QString::fromLatin1(s_function), function);
|
||||
|
||||
}
|
||||
|
||||
void tst_QDebug::textStreamModifiers() const
|
||||
{
|
||||
MessageHandlerSetter mhs(myMessageHandler);
|
||||
|
Loading…
Reference in New Issue
Block a user