From 50e2bc2aa0f46562936a3137c15a2c9b4f67afde Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 16 Feb 2015 15:25:46 +0100 Subject: Fix QDebug cumulating operator<< with many Q_ENUM The problem is that the operator<< was taking a non-const reference to the QDebug object. This causes a problem as all other operator<< return a temporary. Since every other roperator<< takes the QDebug by value, we should also take it by value in this case. Move the operator<< in qdebug.h because i don't want to #include qdebug.h from qobject.h And move the qt_QMetaEnum_debugOperator to be in the corresponding .cpp Task-number: QTBUG-44462 Change-Id: Ia01629224c58930c2997e767efc43de90d6309e2 Reviewed-by: Friedemann Kleint --- src/corelib/kernel/qobject.cpp | 14 -------------- src/corelib/kernel/qobject.h | 10 ---------- 2 files changed, 24 deletions(-) (limited to 'src/corelib/kernel') diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 98e3f6b5bd..265cc68db5 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -4106,20 +4106,6 @@ QDebug operator<<(QDebug dbg, const QObject *o) dbg << ')'; return dbg; } - -QDebug qt_QMetaEnum_debugOperator(QDebug &dbg, int value, const QMetaObject *meta, const char *name) -{ - QDebugStateSaver saver(dbg); - QMetaEnum me = meta->enumerator(meta->indexOfEnumerator(name)); - const char *key = me.valueToKey(value); - dbg.nospace() << meta->className() << "::" << name << '('; - if (key) - dbg << key; - else - dbg << value; - dbg << ')'; - return dbg; -} #endif /*! diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h index ae1c92f127..42d18d6c41 100644 --- a/src/corelib/kernel/qobject.h +++ b/src/corelib/kernel/qobject.h @@ -547,16 +547,6 @@ template inline const char * qobject_interface_iid() #ifndef QT_NO_DEBUG_STREAM Q_CORE_EXPORT QDebug operator<<(QDebug, const QObject *); -Q_CORE_EXPORT QDebug qt_QMetaEnum_debugOperator(QDebug&, int value, const QMetaObject *meta, const char *name); - -template -typename QtPrivate::QEnableIf::Value , QDebug>::Type -operator<<(QDebug &dbg, T value) -{ - const QMetaObject *obj = qt_getEnumMetaObject(value); - const char *name = qt_getEnumName(value); - return qt_QMetaEnum_debugOperator(dbg, typename QFlags::Int(value), obj, name); -} #endif class QSignalBlocker -- cgit v1.2.3