From 766105b201663f49d7d4050e6fe7f443e8ca0312 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 7 Oct 2021 18:37:46 +0200 Subject: [PATCH] leak statistics fixed --- src/common/QskObjectCounter.cpp | 48 ++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/src/common/QskObjectCounter.cpp b/src/common/QskObjectCounter.cpp index 5a19715c..c8a8c2cc 100644 --- a/src/common/QskObjectCounter.cpp +++ b/src/common/QskObjectCounter.cpp @@ -80,17 +80,34 @@ namespace int maximum; }; - class CounterData +#if QSK_OBJECT_INFO + class InsertEvent : public QEvent + { + public: + static const auto type = static_cast< QEvent::Type >( QEvent::User + 1777 ); + + InsertEvent( const QObject* obj ) + : QEvent( type ) + , object( obj ) + { + } + + QPointer< const QObject > object; + }; +#endif + + class CounterData final : public QObject { public: Counter counter[ 2 ]; #if QSK_OBJECT_INFO - void insertObjectInfo( const QObject* object ) { - objectTable.insert( object, - { object->objectName(), object->metaObject()->className() } ); + // object is not fully constructed here + + if ( qApp && object ) + qApp->postEvent( this, new InsertEvent( object ) ); } void removeObjectInfo( const QObject* object ) @@ -99,6 +116,23 @@ namespace } QHash< const QObject*, ObjectInfo > objectTable; + + protected: + + bool event( QEvent *event ) override + { + if ( event->type() == InsertEvent::type ) + { + auto ev = static_cast< const InsertEvent* >( event ); + if ( const QObject* obj = ev->object ) + { + objectTable.insert( obj, + { obj->objectName(), obj->metaObject()->className() } ); + } + } + + return true; + } #endif }; @@ -192,11 +226,7 @@ void CounterHook::addObject( QObject* object ) counterData->counter[ QskObjectCounter::Items ].increment(); #if QSK_OBJECT_INFO - { - // object is not fully constructed here - QTimer::singleShot( 0, object, - [ counterData, object ] { counterData->insertObjectInfo( object ); } ); - } + counterData->insertObjectInfo( object ); #endif }