From 4293eef6bcaa1ec92e9cd430d3d009c722a69ce0 Mon Sep 17 00:00:00 2001 From: tianduanrui <2407223896@qq.com> Date: Tue, 24 Apr 2018 10:24:29 +0800 Subject: [PATCH] update --- src/app_link_qqt_library.pri | 4 ++-- src/core/qqtobjectmanager.cpp | 16 ++++++++++++++++ src/core/qqtobjectmanager.h | 28 +++++++++++++++++++--------- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/app_link_qqt_library.pri b/src/app_link_qqt_library.pri index 9b9989e0..29d41afa 100644 --- a/src/app_link_qqt_library.pri +++ b/src/app_link_qqt_library.pri @@ -59,8 +59,8 @@ contains (CONFIG, QQT_SOURCE_BUILDIN) { #you can open one or more macro to make sdk or link from build. #link from sdk is default setting - CONFIG += link_from_sdk - #CONFIG += link_from_build + #CONFIG += link_from_sdk + CONFIG += link_from_build #CONFIG += link_from_qt_lib_path #especially some occations need some sure macro. diff --git a/src/core/qqtobjectmanager.cpp b/src/core/qqtobjectmanager.cpp index 7855f002..27d6a44d 100644 --- a/src/core/qqtobjectmanager.cpp +++ b/src/core/qqtobjectmanager.cpp @@ -1 +1,17 @@ #include "qqtobjectmanager.h" + +bool operator< ( QByteArray& l, QByteArray& r ) +{ + int cc = qstrcmp ( l, r ); + if ( cc == 0 || cc > 0 ) + return false; + return true; +} + +bool operator== ( QByteArray& l, QByteArray& r ) +{ + int cc = qstrcmp ( l, r ); + if ( cc == 0 ) + return true; + return false; +} diff --git a/src/core/qqtobjectmanager.h b/src/core/qqtobjectmanager.h index 34c9c0bb..80232a7c 100644 --- a/src/core/qqtobjectmanager.h +++ b/src/core/qqtobjectmanager.h @@ -20,10 +20,15 @@ * QQtObjectFactory, * QQtWidgetFactory, */ + +QQTSHARED_EXPORT bool operator< ( QByteArray& l, QByteArray& r ); +QQTSHARED_EXPORT bool operator== ( QByteArray& l, QByteArray& r ); + template class QQTSHARED_EXPORT __QQtObjectFactory__ { public: + /** * 方便函数 * 用于指针类型之间的随意互转,以void*为中转。 @@ -55,16 +60,15 @@ public: /* * 搜索生成此类对象的函数 */ - //pline() << constructors(); + pline() << constructors(); Constructor* constructor = 0;//constructors().value( ( className, 0 ); - QHashIterator itor ( constructors() ); + QMapIterator itor ( constructors() ); + + pline() << constructors().isDetached(); while ( itor.hasNext() ) { itor.next(); - //pline() << itor.key() << itor.value(); - //pline() << ( bool ) ( className == itor.key() ); - if ( ( bool ) ( className == itor.key() ) ) { - constructor = itor.value(); - } + pline() << itor.key() << itor.value(); + #if 0 QByteArray cc; QByteArray dd; @@ -75,6 +79,12 @@ public: if ( cc == dd ) //??? 不能比较吗?能,但是必须加bool转换。 constructor = itor.value(); #endif + + pline() << itor.key() << itor.value(); + pline() << ( bool ) ( className == itor.key() ); + if ( ( bool ) ( className == itor.key() ) ) { + constructor = itor.value(); + } } //pline() << constructor; @@ -104,13 +114,13 @@ private: return new T ( parent ); } - static QHash& constructors() { + static QMap& constructors() { /* * 保存生成类对象的具体(非模板)函数 * 这个变量是全局的。 * 无论是否使用静态函数包裹,这个变量用于是全局的,一直存在,不受类的实例存在与否控制。 */ - static QHash instance; + static QMap instance; return instance; } };