diff -Nru qt5-ukui-platformtheme-4.1.0.0/debian/patches/0077-.patch qt5-ukui-platformtheme-4.1.0.0/debian/patches/0077-.patch
--- qt5-ukui-platformtheme-4.1.0.0/debian/patches/0077-.patch	1970-01-01 08:00:00.000000000 +0800
+++ qt5-ukui-platformtheme-4.1.0.0/debian/patches/0077-.patch	2024-11-08 09:49:00.000000000 +0800
@@ -0,0 +1,124 @@
+From: =?utf-8?b?5p2O5p+v?= <like1@kylinos.cn>
+Date: Wed, 27 Nov 2024 20:39:35 +0800
+Subject: =?utf-8?b?5a6M5oiQ5Li76aKY5qGG5p625Y2V5YWD5rWL6K+V5qGG5p625p6E5bu6?=
+
+---
+ CMakeLists.txt                   |  1 +
+ test/CMakeLists.txt              |  3 +++
+ test/auto-test/CMakeLists.txt    | 31 ++++++++++++++++++++++++++
+ test/auto-test/test-settings.cpp | 48 ++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 83 insertions(+)
+ create mode 100644 test/auto-test/CMakeLists.txt
+ create mode 100644 test/auto-test/test-settings.cpp
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 47ef06a..ce2a998 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,3 +6,4 @@ add_subdirectory(qt5-ukui-platformtheme)
+ add_subdirectory(ukui-qqc2-style)
+ add_subdirectory(ukui-qml-style-helper)
+ add_subdirectory(test)
++enable_testing()
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+index c659fa4..fe698e6 100644
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -7,3 +7,6 @@ add_subdirectory(region-blur)
+ add_subdirectory(system-settings)
+ add_subdirectory(tabwidget)
+ add_subdirectory(mps-style-application)
++add_subdirectory(auto-test)
++
++enable_testing()
+diff --git a/test/auto-test/CMakeLists.txt b/test/auto-test/CMakeLists.txt
+new file mode 100644
+index 0000000..0e3fe9b
+--- /dev/null
++++ b/test/auto-test/CMakeLists.txt
+@@ -0,0 +1,31 @@
++set(CMAKE_AUTOMOC on)
++
++# 查找Qt组件
++find_package(QT NAMES Qt6 Qt5 COMPONENTS Gui Test DBus Qml Widgets REQUIRED)
++find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Gui Test DBus Qml Widgets REQUIRED)
++
++# 查找PkgConfig工具
++find_package(PkgConfig REQUIRED)
++
++# 设置库文件名变量
++include_directories(../../libqt5-ukui-style)
++
++# 将库文件路径添加到库搜索路径中
++link_directories(${LIBRARY_DIR})
++
++# 添加可执行文件test-settings
++add_executable(test-settings
++    test-settings.cpp)
++
++include_directories("/usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes")
++
++# 链接Qt组件到可执行文件test-settings
++target_link_libraries(test-settings PRIVATE Qt${QT_VERSION_MAJOR}::Test
++    Qt${QT_VERSION_MAJOR}::DBus
++    Qt${QT_VERSION_MAJOR}::Gui
++    Qt5::Widgets
++    qt5-ukui-style)
++
++# 添加测试用例
++add_test(NAME test-settings COMMAND test-settings)
++
+diff --git a/test/auto-test/test-settings.cpp b/test/auto-test/test-settings.cpp
+new file mode 100644
+index 0000000..9dbee3a
+--- /dev/null
++++ b/test/auto-test/test-settings.cpp
+@@ -0,0 +1,48 @@
++/*
++ *  * Copyright (C) 2024, KylinSoft Co., Ltd.
++ *  *
++ *  * This program is free software: you can redistribute it and/or modify
++ *  * it under the terms of the GNU General Public License as published by
++ *  * the Free Software Foundation, either version 3 of the License, or
++ *  * (at your option) any later version.
++ *  *
++ *  * This program is distributed in the hope that it will be useful,
++ *  * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  * GNU General Public License for more details.
++ *  *
++ *  * You should have received a copy of the GNU General Public License
++ *  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
++ *  *
++ *  * Authors: like <like1@kylinos.cn>
++ *
++ */
++#include <QtTest>
++#include <dlfcn.h>
++
++#include <dlfcn.h> // 用于动态加载库函数的头文件
++#include "effects/highlight-effect.h"
++
++// 定义函数指针类型,与库中函数的签名匹配
++typedef void (*FunctionInLibType)(void);
++
++// 测试用例类,继承自QObject
++class LibFunctionTest : public QObject
++{
++    Q_OBJECT
++public:
++
++private slots:
++    // 测试调用库中函数的功能
++    void testFunctionInLib()
++    {
++        QWidget w;
++
++        HighLightEffect::setSkipEffect(&w, true);
++    }
++};
++
++// 定义测试用例入口点setSkipEffect
++QTEST_MAIN(LibFunctionTest)
++
++#include "test-settings.moc"
diff -Nru qt5-ukui-platformtheme-4.1.0.0/debian/patches/0078-pc.patch qt5-ukui-platformtheme-4.1.0.0/debian/patches/0078-pc.patch
--- qt5-ukui-platformtheme-4.1.0.0/debian/patches/0078-pc.patch	1970-01-01 08:00:00.000000000 +0800
+++ qt5-ukui-platformtheme-4.1.0.0/debian/patches/0078-pc.patch	2024-11-08 09:49:00.000000000 +0800
@@ -0,0 +1,28 @@
+From: =?utf-8?b?6LCt6Z2Z?= <tanjing@kylinos.cn>
+Date: Mon, 9 Dec 2024 23:35:56 +0800
+Subject: =?utf-8?b?5bmz5p2/44CBcGPmqKHlvI/liIfmjaLlk43lupTlh73mlbDmlLnkuLo=?=
+ =?utf-8?b?5qe95Ye95pWw?=
+
+---
+ ukui-styles/ukui-style-plugin.h | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/ukui-styles/ukui-style-plugin.h b/ukui-styles/ukui-style-plugin.h
+index 6ee6041..99c57f5 100644
+--- a/ukui-styles/ukui-style-plugin.h
++++ b/ukui-styles/ukui-style-plugin.h
+@@ -46,9 +46,13 @@ public:
+ 
+     const QStringList blackList();
+ 
++
++public Q_SLOTS:
++    void tableModeChanged(bool isTableMode);
++
+ protected:
+     void onSystemPaletteChanged();
+-    void tableModeChanged(bool isTableMode);
++
+ 
+ private:
+     QString m_current_style_name;
diff -Nru qt5-ukui-platformtheme-4.1.0.0/debian/patches/0079-Refine-unit-test-cases.patch qt5-ukui-platformtheme-4.1.0.0/debian/patches/0079-Refine-unit-test-cases.patch
--- qt5-ukui-platformtheme-4.1.0.0/debian/patches/0079-Refine-unit-test-cases.patch	1970-01-01 08:00:00.000000000 +0800
+++ qt5-ukui-platformtheme-4.1.0.0/debian/patches/0079-Refine-unit-test-cases.patch	2024-11-08 09:49:00.000000000 +0800
@@ -0,0 +1,2267 @@
+From: like <like1@kylinos.cn>
+Date: Wed, 15 Jan 2025 11:19:30 +0800
+Subject: Refine unit test cases
+
+---
+ libqt5-ukui-style/animations/animation-helper.h    |    4 +-
+ qt5-ukui-filedialog/CMakeLists.txt                 |    6 +-
+ test/CMakeLists.txt                                |    2 +
+ test/auto-test/CMakeLists.txt                      |  192 ++-
+ test/auto-test/test-settings.cpp                   | 1739 +++++++++++++++++++-
+ ukui-styles/blur-helper.h                          |    4 +-
+ .../animations/config-box-animation-helper.h       |    4 +-
+ .../animations/config-box-animator.h               |    2 +-
+ .../animations/config-button-animation-helper.h    |    4 +-
+ .../animations/config-button-animator.h            |    2 +-
+ .../animations/config-checkbox-animation-helper.h  |    4 +-
+ .../animations/config-checkbox-animator.h          |    2 +-
+ .../config-progressbar-animation-helper.h          |    2 +-
+ .../config-radiobutton-animation-helper.h          |    4 +-
+ .../animations/config-radiobutton-animator.h       |    2 +-
+ .../animations/config-scrollbar-animation-helper.h |    4 +-
+ .../animations/config-slider-animation-helper.h    |    4 +-
+ .../animations/config-tree-animation-helper.h      |    4 +-
+ 18 files changed, 1943 insertions(+), 42 deletions(-)
+ mode change 100644 => 100755 test/CMakeLists.txt
+ mode change 100644 => 100755 test/auto-test/CMakeLists.txt
+ mode change 100644 => 100755 test/auto-test/test-settings.cpp
+
+diff --git a/libqt5-ukui-style/animations/animation-helper.h b/libqt5-ukui-style/animations/animation-helper.h
+index a4b9a6d..2e0c59f 100644
+--- a/libqt5-ukui-style/animations/animation-helper.h
++++ b/libqt5-ukui-style/animations/animation-helper.h
+@@ -35,9 +35,9 @@ public:
+     explicit AnimationHelper(QObject *parent = nullptr);
+     virtual ~AnimationHelper();
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+     virtual bool registerWidget(QWidget *) {return false;}
+     virtual bool unregisterWidget(QWidget *) {return false;}
+ 
+diff --git a/qt5-ukui-filedialog/CMakeLists.txt b/qt5-ukui-filedialog/CMakeLists.txt
+index dec6c16..56473fb 100644
+--- a/qt5-ukui-filedialog/CMakeLists.txt
++++ b/qt5-ukui-filedialog/CMakeLists.txt
+@@ -24,7 +24,6 @@ set(KF5_MIN_VERSION "5.66.0")
+ #            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
+ #    endif()
+ #endif()
+-
+ find_package(Qt5Gui)
+ message(${imported_location})
+ set(LIB_PATH ${imported_location})
+@@ -42,15 +41,12 @@ find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
+ include_directories(${Qt5Widgets_PRIVATE_INCLUDE_DIRS})
+ include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
+ 
+-
+ find_package(Qt5LinguistTools)
+-
+ find_package(KF5WindowSystem ${KF5_MIN_VERSION} CONFIG REQUIRED COMPONENTS)
+ find_package(KF5Wayland CONFIG REQUIRED COMPONENTS)
+-
+ find_package(X11)
+-
+ find_package(PkgConfig)
++find_package(Qt5)
+ pkg_check_modules(QGSETTINGS REQUIRED gsettings-qt)
+ pkg_check_modules(PEONY REQUIRED peony)
+ pkg_check_modules(REQUIRED kysdk-waylandhelper)
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+old mode 100644
+new mode 100755
+index fe698e6..86d3f87
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -9,4 +9,6 @@ add_subdirectory(tabwidget)
+ add_subdirectory(mps-style-application)
+ add_subdirectory(auto-test)
+ 
++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
++set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
+ enable_testing()
+diff --git a/test/auto-test/CMakeLists.txt b/test/auto-test/CMakeLists.txt
+old mode 100644
+new mode 100755
+index 0e3fe9b..3e1123f
+--- a/test/auto-test/CMakeLists.txt
++++ b/test/auto-test/CMakeLists.txt
+@@ -1,4 +1,14 @@
+ set(CMAKE_AUTOMOC on)
++set(CMAKE_AUTOMOC on)
++set(CMAKE_AUTOMOC on)
++
++set(CMAKE_CXX_STANDARD 11)
++set(CMAKE_CXX_STANDARD_REQUIRED ON)
++
++set(QT_MIN_VERSION "5.12.0")
++set(KF5_MIN_VERSION "5.66.0")
++
++#set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_CURRENT_SOURCE_DIR}/cmake/kde-modules ${CMAKE_MODULE_PATH})
+ 
+ # 查找Qt组件
+ find_package(QT NAMES Qt6 Qt5 COMPONENTS Gui Test DBus Qml Widgets REQUIRED)
+@@ -7,25 +17,189 @@ find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Gui Test DBus Qml Widgets REQUIRED
+ # 查找PkgConfig工具
+ find_package(PkgConfig REQUIRED)
+ 
++find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS
++    DBus
++    Widgets
++    X11Extras
++)
++
++find_package(gsettings-qt)
++find_package(X11)
++
++include_directories(${Qt5Widgets_PRIVATE_INCLUDE_DIRS})
++include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
++
++find_package(KF5WindowSystem ${KF5_MIN_VERSION} CONFIG REQUIRED COMPONENTS)
++
++find_package(KF5Wayland CONFIG REQUIRED COMPONENTS)
++pkg_check_modules(Qsettings REQUIRED gsettings-qt)
++pkg_check_modules(KYSDKCONF2 REQUIRED kysdk-conf2)
++pkg_check_modules(GLIB2 REQUIRED glib-2.0 gio-2.0 )
++pkg_check_modules(PEONY REQUIRED peony)
++find_package(Qt5LinguistTools)
++
++find_package(KF5WindowSystem ${KF5_MIN_VERSION} CONFIG REQUIRED COMPONENTS)
++find_package(KF5Wayland CONFIG REQUIRED COMPONENTS)
++
++find_package(X11)
++
++find_package(PkgConfig)
++pkg_check_modules(QGSETTINGS REQUIRED gsettings-qt)
++pkg_check_modules(PEONY REQUIRED peony)
++pkg_check_modules(REQUIRED kysdk-waylandhelper)
++pkg_check_modules(GLIB2 REQUIRED glib-2.0 gio-2.0 )
++pkg_check_modules(KYSDKWAYLANDHELPER REQUIRED kysdk-waylandhelper)
++pkg_check_modules(KYSDKCONF2 REQUIRED kysdk-conf2)
++
++
++message(${imported_location})
++set(LIB_PATH ${imported_location})
++get_filename_component(PARENT_PATH "${LIB_PATH}" PATH)
++get_filename_component(PARENT_PATH "${PARENT_PATH}" PATH)
++message("qt5-ukui-filedialog PARENT_PATH: ${PARENT_PATH}")
++set(TARGET_PATH ${PARENT_PATH})
++
++include_directories("/usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes")
++include_directories(${QGSETTINGS_INCLUDE_DIRS})
++include_directories(${GLIB2_INCLUDE_DIRS})
++
++if (PEONY_FOUND)
++    include_directories(${PEONY_INCLUDE_DIRS})
++    link_directories(${PEONY_LIBRARY_DIRS})
++endif()
++if (KYSDKWAYLANDHELPER_FOUND)
++    include_directories(${KYSDKWAYLANDHELPER_INCLUDE_DIRS})
++    link_directories(${KYSDKWAYLANDHELPER_LIBRARY_DIRS})
++endif()
++if (QGSETTINGS_FOUND)
++    include_directories(${QGSETTINGS_INCLUDE_DIRS})
++    link_directories(${QGSETTINGS_LIBRARY_DIRS})
++endif()
++
++if (KYSDKCONF2_FOUND)
++    include_directories(${KYSDKCONF2_INCLUDE_DIRS})
++    link_directories(${KYSDKCONF2_LIBRARY_DIRS})
++endif()
++
++include_directories(${Qsettings_INCLUDE_DIRS})
+ # 设置库文件名变量
+ include_directories(../../libqt5-ukui-style)
++include_directories(../../qt5-ukui-filedialog)
++include_directories(../../ukui-styles)
+ 
+ # 将库文件路径添加到库搜索路径中
+ link_directories(${LIBRARY_DIR})
+ 
+-# 添加可执行文件test-settings
+-add_executable(test-settings
+-    test-settings.cpp)
++file(GLOB_RECURSE test_settings_sources
++    test-settings.cpp
++    ../../libqt5-ukui-style/effects/highlight-effect.h
++    ../../libqt5-ukui-style/effects/highlight-effect.cpp
++    ../../libqt5-ukui-style/settings/application-style-settings.h
++    ../../libqt5-ukui-style/settings/application-style-settings.cpp
++    ../../libqt5-ukui-style/settings/ukui-style-conf-settings.h
++    ../../libqt5-ukui-style/settings/ukui-style-conf-settings.cpp
++    ../../libqt5-ukui-style/settings/ukui-style-settings.h
++    ../../libqt5-ukui-style/settings/ukui-style-settings.cpp
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-scrollbar-default-interaction-animator.h
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-scrollbar-default-interaction-animator.cpp
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-tabwidget-animator-iface.h
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-tabwidget-animator-plugin-iface.h
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-tabwidget-default-slide-animator-factory.h
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-tabwidget-default-slide-animator.h
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-tabwidget-default-slide-animator.cpp
++    ../../libqt5-ukui-style/animations/scrollbar/ukui-tabwidget-default-slide-animator-factory.cpp
++    ../../ukui-styles/**/*.cpp
++    ../../ukui-styles/blur-helper.h
++    ../../ukui-styles/blur-helper.cpp
++    ../../ukui-styles/gesture-helper.h
++    ../../ukui-styles/gesture-helper.cpp
++    ../../ukui-styles/window-manager.h
++    ../../ukui-styles/window-manager.cpp
++#    ../../ukui-styles/ukui-style-plugin.h
++#    ../../ukui-styles/ukui-style-plugin.cpp
++    ../../ukui-styles/readconfig.h
++    ../../ukui-styles/readconfig.cpp
++    ../../ukui-styles/themeinformation.h
+ 
+-include_directories("/usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes")
++    ../../qt5-ukui-filedialog/pathbar.h
++    ../../qt5-ukui-filedialog/sidebar.h
++    ../../qt5-ukui-filedialog/debug.h
++    ../../qt5-ukui-filedialog/kyfiledialog.h
++    ../../qt5-ukui-filedialog/uikyfiledialog.h
++    ../../qt5-ukui-filedialog/filedialoginterface.h
++    ../../qt5-ukui-filedialog/filedialogplugin_global.h
++    ../../qt5-ukui-filedialog/filedialogplugin.h
++    ../../qt5-ukui-filedialog/kyfiledialog.h
++    ../../qt5-ukui-filedialog/kyfiledialogprivate.h
++    ../../qt5-ukui-filedialog/menutoolbutoon.h
++    ../../qt5-ukui-filedialog/uikyfiledialog.h
++
++    ../../qt5-ukui-filedialog/filedialogplugin.cpp
++    ../../qt5-ukui-filedialog/kyfiledialog.cpp
++    ../../qt5-ukui-filedialog/kyfiledialogprivate.cpp
++    ../../qt5-ukui-filedialog/menutoolbutoon.cpp
++    ../../qt5-ukui-filedialog/pathbar.cpp
++    ../../qt5-ukui-filedialog/sidebar.cpp
++    ../../qt5-ukui-filedialog/uikyfiledialog.cpp
++)
++
++add_executable(test-settings ${test-settings_SRCS} ${test_settings_sources} )
++
++file(GLOB_RECURSE test_settings_headers ../../ukui-styles/**/*.h)
++
++set(test-settings_SRCS ${test_settings_headers})
+ 
+-# 链接Qt组件到可执行文件test-settings
+ target_link_libraries(test-settings PRIVATE Qt${QT_VERSION_MAJOR}::Test
+-    Qt${QT_VERSION_MAJOR}::DBus
+-    Qt${QT_VERSION_MAJOR}::Gui
+     Qt5::Widgets
+-    qt5-ukui-style)
++    Qt5::DBus
++    Qt5::Gui
++    Qt5::X11Extras
++    KF5::WaylandClient
++    KF5::WindowSystem
++    ${QGSETTINGS_LIBRARIES}
++    ${KYSDKWAYLANDHELPER_LIBRARIES}
++    xcb
++    glib-2.0
++    ${PEONY_LIBRARIES}
++    ${XCB_LIBS}
++    gsettings-qt
++    qt5-ukui-style
++    ${KYSDKCONF2_LIBRARIES})
++
++set(test_libs
++    Qt5::Widgets
++    glib-2.0
++    peony
++    )
++
++SET(_code "
++    #include <glib-object.h>
++    #include <peony-qt/search-vfs-uri-parser.h>
++
++    int main()
++    {
++       Peony::SearchVFSUriParser::addSearchKey(\"\", true);
++       return 0;
++    }")
++SET(_file ${CMAKE_CURRENT_BINARY_DIR}/DetermineHavePeonyInterface.cpp)
++FILE(WRITE "${_file}" "${_code}")
++TRY_COMPILE(HAVE_PEONY_INTERFACE
++    "${CMAKE_CURRENT_BINARY_DIR}"
++    "${_file}"
++    LINK_LIBRARIES ${test_libs}
++    CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${GLIB2_INCLUDE_DIRS} ${PEONY_INCLUDE_DIRS}"
++    OUTPUT_VARIABLE OUTPUT)
++MESSAGE("Build output: ${OUTPUT} HAVE_PEONY_INTERFACE: ${HAVE_PEONY_INTERFACE}")
++
++if(HAVE_PEONY_INTERFACE)
++    add_definitions(-DHAVE_PEONY_INTERFACE=1)
++endif()
++
++set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
++set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
+ 
+ # 添加测试用例
+ add_test(NAME test-settings COMMAND test-settings)
+-
++add_definitions(-DQT5UKUIPLATFORMTHEME_LIBRARY)
++add_definitions(-DQT_DEPRECATED_WARNINGS)
++add_definitions(-DQT_MESSAGELOGCONTEXT)
+diff --git a/test/auto-test/test-settings.cpp b/test/auto-test/test-settings.cpp
+old mode 100644
+new mode 100755
+index 9dbee3a..3d9c14b
+--- a/test/auto-test/test-settings.cpp
++++ b/test/auto-test/test-settings.cpp
+@@ -19,9 +19,68 @@
+  */
+ #include <QtTest>
+ #include <dlfcn.h>
++#include <QMenu>
++#include <QPushButton>
++#include <QListView>
++#include <QColor>
++#include <QPainter>
++#include <QPixmap>
++#include <QStyleOption>
++#include <QtCore>
++#include <QMetaObject>
++#include <QFileDialog>
++#include <QScrollBar>
++#include <QTabWidget>
++#include <QSpinBox>
++#include <QRadioButton>
++#include <QCheckBox>
+ 
+-#include <dlfcn.h> // 用于动态加载库函数的头文件
+-#include "effects/highlight-effect.h"
++#include "../libqt5-ukui-style/effects/highlight-effect.h"
++#include "../libqt5-ukui-style/settings/application-style-settings.h"
++#include "../libqt5-ukui-style/settings/ukui-style-conf-settings.h"
++#include "../libqt5-ukui-style/settings/ukui-style-settings.h"
++
++#include "../libqt5-ukui-style/animations/scrollbar/ukui-scrollbar-default-interaction-animator.h"
++#include "../libqt5-ukui-style/animations/tabwidget/ukui-tabwidget-animator-iface.h"
++#include "../libqt5-ukui-style/animations/tabwidget/ukui-tabwidget-animator-plugin-iface.h"
++#include "../libqt5-ukui-style/animations/tabwidget/ukui-tabwidget-default-slide-animator-factory.h"
++#include "../libqt5-ukui-style/animations/tabwidget/ukui-tabwidget-default-slide-animator.h"
++#include "../ukui-styles/readconfig.h"
++#include "../ukui-styles/qt5-config-style-ukui/ukui-config-style.h"
++#include "../ukui-styles/blur-helper.h"
++#include "../ukui-styles/gesture-helper.h"
++#include "../ukui-styles/window-manager.h"
++#include "../ukui-styles/ukui-style-plugin.h"
++#include "../ukui-styles/qt5-config-style-ukui/config-shadow-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/config-style-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/ukui-config-style-parameters.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-box-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-box-animator.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-button-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-button-animator.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animator.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-progressbar-animation.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-progressbar-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animator.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-scrollbar-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-slider-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-slider-animator.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-tab-widget-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-tree-animation-helper.h"
++#include "../ukui-styles/qt5-config-style-ukui/animations/config-tree-animator.h"
++#include "../ukui-styles/themeinformation.h"
++
++
++#include "../qt5-ukui-filedialog/debug.h"
++#include "../qt5-ukui-filedialog/filedialogplugin.h"
++#include "../qt5-ukui-filedialog/kyfiledialogprivate.h"
++#include "../qt5-ukui-filedialog/menutoolbutoon.h"
++#include "../qt5-ukui-filedialog/pathbar.h"
++#include "../qt5-ukui-filedialog/sidebar.h"
++#include "../qt5-ukui-filedialog/uikyfiledialog.h"
++#include "../qt5-ukui-filedialog/kyfiledialog.h"
+ 
+ // 定义函数指针类型,与库中函数的签名匹配
+ typedef void (*FunctionInLibType)(void);
+@@ -32,13 +91,1682 @@ class LibFunctionTest : public QObject
+     Q_OBJECT
+ public:
+ 
+-private slots:
++private Q_SLOTS:
+     // 测试调用库中函数的功能
+     void testFunctionInLib()
+     {
+-        QWidget w;
++        QWidget *w = new QWidget ;
++
++        HighLightEffect::setSkipEffect(w, true);
++        w->show();
++
++        const QPixmap pixmap(QSize(100, 100));
++        // 创建pixmap的一个可修改副本,用于后续绘制操作
++        QPixmap modifiablePixmap = pixmap;
++        // 使用QPainter在可修改的副本上进行绘制
++        QPainter painter(&modifiablePixmap);
++        painter.setBrush(Qt::red);
++        painter.drawRect(10, 10, 80, 80);
++        painter.end();
++
++        bool isPixmapPureColor =  HighLightEffect::isPixmapPureColor(pixmap);
++        bool isSymbolicColor =  HighLightEffect::isSymbolicColor(pixmap);
++
++        QMenu *menu = new QMenu();
++        bool setMenuIconHighlightEffect = HighLightEffect::setMenuIconHighlightEffect(menu, HighLightEffect::skipHighlight, HighLightEffect::HighlightOnly);
++
++//        QListView *view = new QListView();
++//        bool setViewItemIconHighlightEffect = HighLightEffect::setViewItemIconHighlightEffect(view,  HighLightEffect::skipHighlight, HighLightEffect::HighlightOnly);
++
++        HighLightEffect::HighLightMode mode = HighLightEffect::isWidgetIconUseHighlightEffect(w);
++
++        const QColor &color = QColor(255, 0, 0);
++        HighLightEffect::setSymoblicColor(color);
++        HighLightEffect::setWidgetIconFillSymbolicColor(w, true);
++
++        const QColor getCurrentSymbolicColor =  HighLightEffect::getCurrentSymbolicColor();
++
++        // 通过静态方法获取实例指针
++        ApplicationStyleSettings *settingsPtr = ApplicationStyleSettings::getInstance();
++
++        // 测试setColorStretagy方法
++        ApplicationStyleSettings::ColorStretagy colorStretagy = ApplicationStyleSettings::Bright;
++        settingsPtr->setColorStretagy(colorStretagy);
++
++
++        // 测试setStyleStretagy方法
++        ApplicationStyleSettings::StyleStretagy styleStretagy = ApplicationStyleSettings::Default;
++        settingsPtr->setStyleStretagy(styleStretagy);
++
++
++        // 测试setCustomStyle方法
++        QString customStyle = "MyCustomStyle";
++        settingsPtr->setCustomStyle(customStyle);
++
++
++        // 测试setColor方法
++        QPalette::ColorRole role = QPalette::Window;
++        QColor setcolor(Qt::red);
++        QPalette::ColorGroup group = QPalette::Active;
++        settingsPtr->setColor(role, setcolor, group);
++
++        // 获取设置后的颜色并验证
++        QColor retrievedColor = settingsPtr->getColor(role, group);
++
++        // 例如,连接colorStretageChanged信号到一个槽函数(这里使用lambda表达式模拟槽函数)
++        bool colorStretageChangedReceived = false;
++
++        // 更改颜色策略,触发信号发射
++        ApplicationStyleSettings::ColorStretagy newColorStretagy = ApplicationStyleSettings::System;
++        settingsPtr->setColorStretagy(newColorStretagy);
++
++        QByteArray schemaId("test_schema");
++        ukuiStyleConfSettings* confinstance = new ukuiStyleConfSettings(schemaId);
++        delete confinstance;
++
++
++        UKUIStyleSettings *ukuisettingsPtr = UKUIStyleSettings::globalInstance();
++//        delete ukuisettingsPtr;
++    }
++    void testScrollBarAnimator(){
++
++        QWidget parentWidget;
++        UKUI::ScrollBar::DefaultInteractionAnimator animator(&parentWidget);
++
++        // 测试bindWidget函数
++        QScrollBar scrollBar;
++        animator.bindWidget(&scrollBar);
++
++        // 测试unboundWidget函数
++        animator.unboundWidget();
++
++        // 重新绑定测试,再次调用bindWidget
++        animator.bindWidget(&scrollBar);
++
++        // 测试value函数
++        animator.value("groove_width");
++        animator.value("slider_opacity");
++        animator.value("additional_opacity");
++        animator.value("move_position");
++        animator.value("bg_width");
++
++        // 测试setAnimatorStartValue和setAnimatorEndValue函数
++        animator.setAnimatorStartValue("groove_width", 0.2);
++        animator.setAnimatorEndValue("groove_width", 0.8);
++        animator.setAnimatorStartValue("slider_opacity", 0.3);
++        animator.setAnimatorEndValue("slider_opacity", 0.7);
++        animator.setAnimatorStartValue("additional_opacity", 0.1);
++        animator.setAnimatorEndValue("additional_opacity", 0.5);
++        animator.setAnimatorStartValue("move_position", 0.0);
++        animator.setAnimatorEndValue("move_position", 1.0);
++        animator.setAnimatorStartValue("bg_width", 0.0);
++        animator.setAnimatorEndValue("bg_width", 1.0);
++
++        // 测试setAnimatorDuration函数
++        animator.setAnimatorDuration("groove_width", 300);
++        animator.setAnimatorDuration("slider_opacity", 250);
++        animator.setAnimatorDuration("additional_opacity", 200);
++        animator.setAnimatorDuration("move_position", 350);
++        animator.setAnimatorDuration("bg_width", 280);
++
++        // 测试setAnimatorDirectionForward函数
++        animator.setAnimatorDirectionForward("groove_width", true);
++        animator.setAnimatorDirectionForward("slider_opacity", false);
++        animator.setAnimatorDirectionForward("additional_opacity", true);
++        animator.setAnimatorDirectionForward("move_position", false);
++        animator.setAnimatorDirectionForward("bg_width", true);
++
++        // 测试isRunning函数
++        animator.isRunning("groove_width");
++        animator.isRunning("slider_opacity");
++        animator.isRunning("additional_opacity");
++        animator.isRunning("move_position");
++        animator.isRunning("bg_width");
++
++        // 测试startAnimator和stopAnimator函数
++        animator.startAnimator("groove_width");
++        animator.stopAnimator("groove_width");
++        animator.startAnimator("slider_opacity");
++        animator.stopAnimator("slider_opacity");
++        animator.startAnimator("additional_opacity");
++        animator.stopAnimator("additional_opacity");
++        animator.startAnimator("move_position");
++        animator.stopAnimator("move_position");
++        animator.startAnimator("bg_width");
++        animator.stopAnimator("bg_width");
++
++        // 测试currentAnimatorTime和setAnimatorCurrentTime函数
++        animator.startAnimator("groove_width");
++        animator.setAnimatorCurrentTime("groove_width", 100);
++        animator.currentAnimatorTime("groove_width");
++        animator.startAnimator("slider_opacity");
++        animator.setAnimatorCurrentTime("slider_opacity", 80);
++        animator.currentAnimatorTime("slider_opacity");
++        animator.startAnimator("additional_opacity");
++        animator.setAnimatorCurrentTime("additional_opacity", 50);
++        animator.currentAnimatorTime("additional_opacity");
++        animator.startAnimator("move_position");
++        animator.setAnimatorCurrentTime("move_position", 120);
++        animator.currentAnimatorTime("move_position");
++        animator.startAnimator("bg_width");
++        animator.setAnimatorCurrentTime("bg_width", 90);
++        animator.currentAnimatorTime("bg_width");
++
++        // 测试setExtraProperty和getExtraProperty函数
++        animator.setExtraProperty("end_position", 10);
++        animator.setExtraProperty("start_position", 5);
++        animator.setExtraProperty("addValue", true);
++        animator.getExtraProperty("end_position");
++        animator.getExtraProperty("start_position");
++        animator.getExtraProperty("addValue");
++
++        // 析构函数测试(通过对象生命周期结束自动调用析构函数来间接验证资源释放)
++        {
++            QWidget parentWidgetForDelete;
++            UKUI::ScrollBar::DefaultInteractionAnimator* animatorOnHeap = new UKUI::ScrollBar::DefaultInteractionAnimator(&parentWidgetForDelete);
++            animatorOnHeap->bindWidget(&scrollBar);
++            delete animatorOnHeap;
++        }
++
++    }
++    void testTabWidgetAnimator(){
++        // 测试构造函数
++        QWidget *parentWidget = new QWidget();
++        UKUI::TabWidget::DefaultSlideAnimator animator(parentWidget);
++
++        QTabWidget tabWidget;
++        tabWidget.addTab(new QWidget, "Tab 1");
++        tabWidget.addTab(new QWidget, "Tab 2");
++//        QWidget parentWidgetForDelete;
++
++//        bool aaa = animator.bindTabWidget(&tabWidget);
++
++
++//        UKUI::TabWidget::DefaultSlideAnimator* animatorOnHeap = new UKUI::TabWidget::DefaultSlideAnimator(&parentWidgetForDelete);
++//        animatorOnHeap->bindTabWidget(&tabWidget);
++//        delete animatorOnHeap;
++//        // 测试bindTabWidget函数
++
++//        // 可以通过一些公开的属性或者行为来间接验证是否绑定成功,比如检查信号连接是否建立(这里只是示意,实际需根据具体信号连接情况进一步完善)
++//        // 假设类中有方法可以获取信号连接相关信息,比如获取currentChanged信号连接的数量等(需根据实际类设计来定)
++//        // int signalConnectionCount = animator.getSignalConnectionCount();
++//        // EXPECT_GT(signalConnectionCount, 0);
++
++//        // 模拟触发currentChanged信号来执行相关逻辑(简单触发,未细致验证逻辑结果)
++//        QObject::connect(&tabWidget, &QTabWidget::currentChanged, [](int) {});
++////        Q_EMIT tabWidget.currentChanged(0);
++
++//        // 测试unboundTabWidget函数
++//        animator.unboundTabWidget();
++//        // 可以通过检查一些相关属性是否被重置来间接验证解绑是否成功,比如绑定的相关对象指针是否被置空等(同样需根据实际类设计)
++//        // EXPECT_EQ(animator.getBoundWidget(), nullptr);
++
++//        // 重新绑定进行多次操作测试
++//        animator.bindTabWidget(&tabWidget);
++
++//        // 测试eventFilter函数(通过传递合适的公开对象来调用函数)
++//        QEvent event(QEvent::None);
++//        animator.eventFilter(&tabWidget, &event);
++//        // 对于与m_tmp_page相关的过滤逻辑,通过触发整体的事件过滤机制,观察类的行为变化来间接验证(比如是否执行了相应的repaint等操作,可根据实际情况进一步细化验证)
++//        animator.eventFilter(tabWidget.widget(0), &event);
++//        animator.eventFilter(tabWidget.widget(1), &event);
++//        animator.eventFilter(animator.m_stack, &event);
++
++//        // 测试watchSubPage函数
++//        for (int i = 0; i < tabWidget.count(); i++) {
++//            animator.watchSubPage(tabWidget.widget(i));
++//        }
++
++//        // 测试filterTabWidget函数(传入不同类型事件简单触发)
++//        QEvent closeEvent(QEvent::Close);
++//        animator.filterTabWidget(&tabWidget, &closeEvent);
++//        QEvent otherEvent(QEvent::MouseButtonPress);
++//        animator.filterTabWidget(&tabWidget, &otherEvent);
++
++//        // 测试filterStackedWidget函数(传入不同类型事件简单触发)
++//        animator.filterStackedWidget(animator.m_stack, &closeEvent);
++//        animator.filterStackedWidget(animator.m_stack, &otherEvent);
++//        QEvent childAddedEvent(QEvent::ChildAdded);
++//        animator.filterStackedWidget(animator.m_stack, &childAddedEvent);
++
++//        // 测试filterSubPage函数(传入不同类型事件简单触发)
++//        QEvent showEvent(QEvent::Show);
++//        QEvent hideEvent(QEvent::Hide);
++//        QEvent resizeEvent(QEvent::Resize);
++//        animator.filterSubPage(tabWidget.widget(0), &showEvent);
++//        animator.filterSubPage(tabWidget.widget(0), &hideEvent);
++//        animator.filterSubPage(tabWidget.widget(0), &resizeEvent);
++
++        // 测试filterTmpPage函数(传入不同类型事件简单触发)
++//        animator.filterTmpPage(animator.m_tmp_page, &showEvent);
++//        animator.filterTmpPage(animator.m_tmp_page, &paintEvent);
++        // 同样可以通过观察m_tmp_page所在的整体界面等是否有预期的显示、绘制等变化来间接验证此函数的功能(实际需进一步细化观察机制)
++
++        // 测试clearPixmap函数
++//        animator.clearPixmap();
++
++        // 析构函数测试(通过对象生命周期结束自动调用析构函数来间接验证资源释放)
++//        {
++//            QWidget parentWidgetForDelete;
++//            UKUI::TabWidget::DefaultSlideAnimator* animatorOnHeap = new UKUI::TabWidget::DefaultSlideAnimator(&parentWidgetForDelete);
++//            animatorOnHeap->bindTabWidget(&tabWidget);
++//            delete animatorOnHeap;
++//        }
++    }
++    void testNewStyle(){
++        UKUIConfigStyle style("Test Style");   // 创建UKUIConfigStyle类的实例
++
++        // 准备QStyleOption参数,这里以QStyleOptionButton为例,你需要根据实际element类型来准确构造合适的选项
++        QStyleOptionButton option;
++        option.state = QStyle::State_None;
++        option.text = "Test Button";
++
++        QPainter painter1;  // 创建QPainter实例,不过要注意在实际使用中可能需要关联到具体的绘制设备,比如QPixmap等
++        QWidget dummyWidget;  // 创建一个虚拟的QWidget实例,仅用于满足参数要求,实际中可能需要根据具体情况使用合适的真实Widget或nullptr
++
++        style.drawControl(QStyle::CE_PushButton, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_CheckBox, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ScrollBarSlider, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ScrollBarAddLine, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ScrollBarSubLine, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ToolButtonLabel, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_TabBarTab, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_TabBarTabShape, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_TabBarTabLabel, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ComboBoxLabel, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_RadioButton, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_CheckBox, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_CheckBoxLabel, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_MenuBarItem, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_MenuItem, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ToolBoxTab, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ToolBoxTabShape, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ToolBoxTabLabel, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ProgressBar, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ProgressBarGroove, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ProgressBarContents, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ProgressBarLabel, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_Header, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_HeaderSection, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_HeaderLabel, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_HeaderEmptyArea, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ItemViewItem, &option, &painter1, &dummyWidget);
++        style.drawControl(QStyle::CE_ShapedFrame, &option, &painter1, &dummyWidget);
++
++
++        QSize referenceSize(200, 30);
++
++        QStyleOptionButton optionLineEdit;
++        optionLineEdit.state = QStyle::State_None;
++        optionLineEdit.text = "Test LineEdit";
++        QSize lineeditSize = style.sizeFromContents(QStyle::CT_LineEdit, &optionLineEdit, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << lineeditSize;
++
++        QStyleOptionButton optionToolButton;
++        optionToolButton.state = QStyle::State_None;
++        optionToolButton.text = "Test ToolButton";
++        QSize toolbuttonSize = style.sizeFromContents(QStyle::CT_ToolButton, &optionToolButton, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << toolbuttonSize;
++
++        QStyleOptionButton optionMenuItem;
++        optionMenuItem.state = QStyle::State_None;
++        optionMenuItem.text = "Test MenuItem";
++        QSize menuitemSize = style.sizeFromContents(QStyle::CT_MenuItem, &optionMenuItem, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << menuitemSize;
++
++        QStyleOptionButton optionTabBarTab;
++        optionTabBarTab.state = QStyle::State_None;
++        optionTabBarTab.text = "Test MenuItem";
++        QSize TabBarTabSize = style.sizeFromContents(QStyle::CT_TabBarTab, &optionTabBarTab, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << TabBarTabSize;
++
++        QStyleOptionButton optionRadioButton;
++        optionRadioButton.state = QStyle::State_None;
++        optionRadioButton.text = "Test MenuItem";
++        QSize RadioButtonSize = style.sizeFromContents(QStyle::CT_RadioButton, &optionRadioButton, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << RadioButtonSize;
++
++        QStyleOptionButton optionCheckBox;
++        optionCheckBox.state = QStyle::State_None;
++        optionCheckBox.text = "Test MenuItem";
++        QSize CheckBoxSize = style.sizeFromContents(QStyle::CT_CheckBox, &optionCheckBox, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << CheckBoxSize;
++
++        QStyleOptionButton optionPushButton;
++        optionPushButton.state = QStyle::State_None;
++        optionPushButton.text = "Test MenuItem";
++        QSize PushButtonSize = style.sizeFromContents(QStyle::CT_PushButton, &optionPushButton, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << PushButtonSize;
++
++        QStyleOptionComboBox optionComboBox;
++        optionComboBox.state = QStyle::State_None;
++//        optionComboBox.text = "Test MenuItem";
++        QSize ComboBoxSize = style.sizeFromContents(QStyle::CT_ComboBox, &optionComboBox, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << ComboBoxSize;
++
++        QStyleOptionSpinBox optionSpinBox;
++        optionSpinBox.state = QStyle::State_None;
++//        optionSpinBox.text = "Test MenuItem";
++        QSize SpinBoxSize = style.sizeFromContents(QStyle::CT_SpinBox, &optionSpinBox, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << SpinBoxSize;
++
++        QStyleOptionProgressBar optionProgressBar;
++        optionProgressBar.state = QStyle::State_None;
++        optionProgressBar.text = "Test MenuItem";
++        QSize ProgressBarSize = style.sizeFromContents(QStyle::CT_ProgressBar, &optionProgressBar, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << ProgressBarSize;
++
++        QStyleOptionSlider optionSlider;
++        optionSlider.state = QStyle::State_None;
++//        optionSlider.text = "Test MenuItem";
++        QSize SliderSize = style.sizeFromContents(QStyle::CT_ProgressBar, &optionSlider, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << SliderSize;
++
++        QStyleOptionHeader optionHeaderSection;
++        optionHeaderSection.state = QStyle::State_None;
++        optionHeaderSection.text = "Test MenuItem";
++        QSize HeaderSectionSize = style.sizeFromContents(QStyle::CT_HeaderSection, &optionHeaderSection, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << HeaderSectionSize;
++
++        QStyleOptionViewItem optionItemViewItem;
++        optionItemViewItem.state = QStyle::State_None;
++        optionItemViewItem.text = "Test MenuItem";
++        QSize ItemViewItemSize = style.sizeFromContents(QStyle::CT_HeaderSection, &optionItemViewItem, referenceSize, nullptr);
++        qDebug() << "Calculated size : " << ItemViewItemSize;
++
++        QPainter painter2;
++        QWidget dummyWidget2;
++        QStyleOptionSlider optionSlider1;
++        style.drawComplexControl(QStyle::CC_Slider, &optionSlider1, &painter2, &dummyWidget2);
++
++        QStyleOptionSlider optionScrollBar;
++        style.drawComplexControl(QStyle::CC_ScrollBar, &optionScrollBar, &painter2, &dummyWidget2);
++
++        QStyleOptionComboBox optionComboBox1;
++        style.drawComplexControl(QStyle::CC_ComboBox, &optionComboBox1, &painter2, &dummyWidget2);
++
++        QStyleOptionSpinBox optionSpinBox1;
++        style.drawComplexControl(QStyle::CC_SpinBox, &optionSpinBox1, &painter2, &dummyWidget2);
++
++        QStyleOptionToolButton optionToolButton1;
++        style.drawComplexControl(QStyle::CC_ToolButton, &optionToolButton1, &painter2, &dummyWidget2);
++
++        QStyleOptionGroupBox optionGroupBox;
++        style.drawComplexControl(QStyle::CC_GroupBox, &optionGroupBox, &painter2, &dummyWidget2);
++
++
++        QStyleOption subEoption;
++        QWidget subEWidget;
++        QRect subErect;
++        // 测试不同的子元素
++
++        subErect = style.subElementRect(QStyle::SE_TabBarScrollLeftButton, &subEoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_TabBarScrollRightButton, &subEoption, &subEWidget);
++        QStyleOptionTab Taboption;
++        subErect = style.subElementRect(QStyle::SE_TabBarTabLeftButton, &Taboption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_TabBarTabRightButton, &Taboption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_TabBarTabText, &Taboption, &subEWidget);
++        QStyleOptionTabWidgetFrame TabWidgetFrameoption;
++        subErect = style.subElementRect(QStyle::SE_TabWidgetTabPane, &TabWidgetFrameoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_TabWidgetTabContents, &TabWidgetFrameoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_TabWidgetTabBar, &TabWidgetFrameoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_TabWidgetRightCorner, &TabWidgetFrameoption, &subEWidget);
++
++
++        subErect = style.subElementRect(QStyle::SE_RadioButtonIndicator, &subEoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_RadioButtonContents, &subEoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_CheckBoxIndicator, &subEoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_CheckBoxContents, &subEoption, &subEWidget);
++
++        QStyleOptionButton Buttonoption;
++        subErect = style.subElementRect(QStyle::SE_PushButtonContents, &Buttonoption, &subEWidget);
++
++        QStyleOptionFrame Frameoption;
++        subErect = style.subElementRect(QStyle::SE_LineEditContents, &Frameoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_ProgressBarGroove, &Frameoption, &subEWidget);
++
++        QStyleOptionProgressBar ProgressBaroption;
++        subErect = style.subElementRect(QStyle::SE_ProgressBarContents, &ProgressBaroption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_ProgressBarLabel, &ProgressBaroption, &subEWidget);
++
++        QStyleOptionHeader Headeroption;
++        subErect = style.subElementRect(QStyle::SE_HeaderLabel, &Headeroption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_HeaderArrow, &Headeroption, &subEWidget);
++
++        QStyleOptionViewItem ViewItemoption;
++        subErect = style.subElementRect(QStyle::SE_ItemViewItemCheckIndicator, &ViewItemoption, &subEWidget);
++        subErect = style.subElementRect(QStyle::SE_ItemViewItemFocusRect, &ViewItemoption, &subEWidget);
++    }
++
++    void testUnpolish()
++    {
++        UKUIConfigStyle style("testUnpolish Style");;
++        QWidget widget;
++        style.unpolish(&widget);
++        // 这里可以添加对初始状态的验证,例如检查某些属性是否已被正确设置或移除
++
++        // 测试普通 QWidget 的 unpolish 操作
++        QWidget testWidget;
++        style.unpolish(&testWidget);
++//         验证一些属性是否被正确移除或修改,例如事件过滤器是否已移除
++//        QVERIFY(!testWidget.eventFilter(nullptr, nullptr));
++
++
++        // 测试不同类型的部件
++        QLabel label;
++        style.unpolish(&label);
++//        QVERIFY(!label.wordWrap());
++
++        QMenu menu;
++        style.unpolish(&menu);
++        // 可以根据具体的实现添加更多的验证逻辑
++
++        QTabWidget tabWidget;
++        style.unpolish(&tabWidget);
++        // 验证 tabWidget 相关的动画助手是否正确注销
++        // 这里假设你有相应的方法来检查 m_tab_animation_helper 是否注销
++        // 例如,通过检查内部状态或调用某些辅助函数来确认
++
++        QScrollBar scrollBar;
++        style.unpolish(&scrollBar);
++        // 验证 scrollBar 相关的动画助手是否正确注销
++
++
++        QListView itemView;
++        style.unpolish(&itemView);
++        // 验证 itemView 的视口属性是否已正确设置
++//        QVERIFY(itemView.viewport()->testAttribute(Qt::WA_Hover));
++
++
++        QToolButton toolButton;
++        style.unpolish(&toolButton);
++        // 验证 toolButton 相关的动画助手是否正确注销
++
++
++        QPushButton pushButton;
++        style.unpolish(&pushButton);
++        // 验证 pushButton 相关的动画助手是否正确注销
++
++
++        QComboBox comboBox;
++        style.unpolish(&comboBox);
++        // 验证 comboBox 相关的动画助手是否正确注销
++
++        QSpinBox spinBox;
++        style.unpolish(&spinBox);
++        // 验证 spinBox 相关的动画助手是否正确注销
++
++
++        QDoubleSpinBox doubleSpinBox;
++        style.unpolish(&doubleSpinBox);
++        // 验证 doubleSpinBox 相关的动画助手是否正确注销
++
++
++        QRadioButton radioButton;
++        style.unpolish(&radioButton);
++        // 验证 radioButton 相关的动画助手是否正确注销
++
++
++        QCheckBox checkBox;
++        style.unpolish(&checkBox);
++        // 验证 checkBox 相关的动画助手是否正确注销
++
++
++        QSlider slider;
++        style.unpolish(&slider);
++        // 验证 slider 相关的动画助手是否正确注销
++
++
++        QLineEdit lineEdit;
++        style.unpolish(&lineEdit);
++        // 验证 lineEdit 的属性是否已正确设置
++//        QVERIFY(!lineEdit.testAttribute(Qt::WA_Hover));
++
++
++        QTreeView treeView;
++        style.unpolish(&treeView);
++        // 验证 treeView 相关的动画助手是否正确注销
++
++
++//        // 测试 nullptr 输入
++//        style.unpolish(nullptr);
++//        // 这里可以根据实现,检查是否正确处理 nullptr 输入,例如是否会崩溃或有异常输出
++
++
++        // 测试窗口部件的各种属性组合
++        QWidget windowWidget;
++        windowWidget.setWindowFlags(Qt::Window);
++        windowWidget.setProperty("useStyleWindowManager", true);
++        style.unpolish(&windowWidget);
++        // 验证窗口部件的窗口管理器是否正确注销
++
++
++        QWidget translucentWidget;
++        translucentWidget.setWindowFlags(Qt::Window);
++        translucentWidget.setAttribute(Qt::WA_TranslucentBackground, true);
++        style.unpolish(&translucentWidget);
++        // 验证具有半透明背景的窗口部件的处理是否正确
++
++
++//        // 测试手势库加载失败的情况
++//        // 这里需要模拟 QLibrary 加载失败的情况,可能需要对 UKUIConfigStyle 进行一些修改或使用模拟对象
++//        // 例如,通过重写 QLibrary 或者使用依赖注入的方式来控制 QLibrary 的行为
++
++
++        // 测试 QTipLabel 相关逻辑
++        QWidget tipLabel;
++        style.unpolish(&tipLabel);
++        // 可以根据具体的实现添加相应的验证
++
++
++        // 测试属性 "useStyleWindowManager" 不同情况的处理
++        QWidget customWidget;
++        customWidget.setWindowFlags(Qt::Window);
++        customWidget.setProperty("useStyleWindowManager", false);
++        style.unpolish(&customWidget);
++        // 验证不同属性值下的处理是否正确
++
++
++        // 测试各种部件的继承关系
++        QWidget derivedWidget;
++        derivedWidget.setWindowFlags(Qt::Window);
++        derivedWidget.inherits("QPushButton");
++        style.unpolish(&derivedWidget);
++        // 验证继承关系的处理是否正确
++
++
++        // 测试不同 Qt 版本下的逻辑
++        // 可以使用 QT_VERSION 宏来有选择地执行不同的测试逻辑
++//#if (QT_VERSION >= QT_VERSION_CHECK(5,12,0))
++//        // 这里可以添加针对 Qt 5.12 及以上版本的测试逻辑
++//#endif
++
++
++        // 测试不同应用名称下的逻辑
++        qApp->setApplicationName("ukui-menu");
++        QWidget menuWidget;
++        style.unpolish(&menuWidget);
++        // 验证 ukui-menu 应用名称下的处理是否正确
++
++
++        qApp->setApplicationName("other-app");
++        QWidget otherWidget;
++        style.unpolish(&otherWidget);
++        // 验证其他应用名称下的处理是否正确
++
++
++        // 更多的测试用例可以根据函数的实现添加,覆盖更多的边界情况和异常情况
++    }
++
++    void ConfigSliderAnimatorTests()
++    {
++        QSlider widget;
++        UKUIConfigStyleSpace::ConfigSliderAnimator animator;
++
++        // 测试 bindWidget 函数
++        animator.bindWidget(&widget);
++
++        // 测试 setAnimatorStartValue 函数
++        animator.setAnimatorStartValue("slider_opacity", 0.0);
++        animator.setAnimatorStartValue("additional_opacity", 0.0);
++        animator.setAnimatorStartValue("move_position", 0.0);
++        animator.setAnimatorStartValue("bg_width", 0.0);
++
++        // 测试 setAnimatorEndValue 函数
++        animator.setAnimatorEndValue("slider_opacity", 1.0);
++        animator.setAnimatorEndValue("additional_opacity", 0.1);
++        animator.setAnimatorEndValue("move_position", 1.0);
++        animator.setAnimatorEndValue("bg_width", 1.0);
++
++        // 测试 setAnimatorDuration 函数
++        animator.setAnimatorDuration("slider_opacity", 200);
++        animator.setAnimatorDuration("additional_opacity", 150);
++        animator.setAnimatorDuration("move_position", 150);
++        animator.setAnimatorDuration("bg_width", 200);
++
++        // 测试 setAnimatorDirectionForward 函数
++        animator.setAnimatorDirectionForward("slider_opacity", true);
++        animator.setAnimatorDirectionForward("additional_opacity", false);
++        animator.setAnimatorDirectionForward("move_position", true);
++        animator.setAnimatorDirectionForward("bg_width", false);
++
++        // 测试 startAnimator 函数
++        animator.startAnimator("slider_opacity");
++        animator.startAnimator("additional_opacity");
++        animator.startAnimator("move_position");
++        animator.startAnimator("bg_width");
++
++        // 等待一段时间让动画运行
++        QApplication::processEvents();
++        QThread::msleep(250);
++
++        // 测试 value 函数
++        qDebug() << "slider_opacity value: " << animator.value("slider_opacity");
++        qDebug() << "additional_opacity value: " << animator.value("additional_opacity");
++        qDebug() << "move_position value: " << animator.value("move_position");
++        qDebug() << "bg_width value: " << animator.value("bg_width");
++
++        // 测试 animatorStartValue 函数
++        qDebug() << "slider_opacity start value: " << animator.animatorStartValue("slider_opacity");
++        qDebug() << "additional_opacity start value: " << animator.animatorStartValue("additional_opacity");
++        qDebug() << "move_position start value: " << animator.animatorStartValue("move_position");
++        qDebug() << "bg_width start value: " << animator.animatorStartValue("bg_width");
++
++        // 测试 animatorEndValue 函数
++        qDebug() << "slider_opacity end value: " << animator.animatorEndValue("slider_opacity");
++        qDebug() << "additional_opacity end value: " << animator.animatorEndValue("additional_opacity");
++        qDebug() << "move_position end value: " << animator.animatorEndValue("move_position");
++        qDebug() << "bg_width end value: " << animator.animatorEndValue("bg_width");
++
++        // 测试 isRunning 函数
++        qDebug() << "slider_opacity is running: " << animator.isRunning("slider_opacity");
++        qDebug() << "additional_opacity is running: " << animator.isRunning("additional_opacity");
++        qDebug() << "move_position is running: " << animator.isRunning("move_position");
++        qDebug() << "bg_width is running: " << animator.isRunning("bg_width");
++
++        // 测试 currentAnimatorTime 函数
++        qDebug() << "slider_opacity current time: " << animator.currentAnimatorTime("slider_opacity");
++        qDebug() << "additional_opacity current time: " << animator.currentAnimatorTime("additional_opacity");
++        qDebug() << "move_position current time: " << animator.currentAnimatorTime("move_position");
++        qDebug() << "bg_width current time: " << animator.currentAnimatorTime("bg_width");
++
++        // 测试 totalAnimationDuration 函数
++        qDebug() << "slider_opacity total duration: " << animator.totalAnimationDuration("slider_opacity");
++        qDebug() << "additional_opacity total duration: " << animator.totalAnimationDuration("additional_opacity");
++        qDebug() << "move_position total duration: " << animator.totalAnimationDuration("move_position");
++        qDebug() << "bg_width total duration: " << animator.totalAnimationDuration("bg_width");
++
++        // 测试 setExtraProperty 函数
++        animator.setExtraProperty("end_position", 100);
++        animator.setExtraProperty("start_position", 50);
++        animator.setExtraProperty("addValue", true);
++
++        // 测试 getExtraProperty 函数
++        qDebug() << "end_position: " << animator.getExtraProperty("end_position");
++        qDebug() << "start_position: " << animator.getExtraProperty("start_position");
++        qDebug() << "addValue: " << animator.getExtraProperty("addValue");
++
++        // 测试 stopAnimator 函数
++        animator.stopAnimator("slider_opacity");
++        animator.stopAnimator("additional_opacity");
++        animator.stopAnimator("move_position");
++        animator.stopAnimator("bg_width");
++
++        // 测试 unboundWidget 函数
++        animator.unboundWidget();
++    }
++
++    void runConfigBoxAnimatorTests()
++    {
++        QComboBox comboBox;
++        UKUIConfigStyleSpace::ConfigBoxAnimator animator;
++
++        // 测试 bindWidget 函数
++        bool bindResult = animator.bindWidget(&comboBox);
++        qDebug() << "bindWidget result: " << bindResult;
++        if (bindResult) {
++            // 测试 setAnimatorStartValue 函数
++            animator.setAnimatorStartValue("MouseOver", 0.2);
++            animator.setAnimatorStartValue("SunKen", 0.3);
++
++            // 测试 setAnimatorEndValue 函数
++            animator.setAnimatorEndValue("MouseOver", 0.8);
++            animator.setAnimatorEndValue("SunKen", 0.7);
++
++            // 测试 setAnimatorDuration 函数
++            animator.setAnimatorDuration("MouseOver", 150);
++            animator.setAnimatorDuration("SunKen", 120);
++
++            // 测试 setAnimatorDirectionForward 函数
++            animator.setAnimatorDirectionForward("MouseOver", true);
++            animator.setAnimatorDirectionForward("SunKen", false);
++
++            // 测试 startAnimator 函数
++            animator.startAnimator("MouseOver");
++            animator.startAnimator("SunKen");
++
++            // 等待一段时间让动画运行
++            QApplication::processEvents();
++            QThread::msleep(100);
++
++            // 测试 value 函数
++            qDebug() << "MouseOver value: " << animator.value("MouseOver");
++            qDebug() << "SunKen value: " << animator.value("SunKen");
++
++            // 测试 isRunning 函数
++            qDebug() << "MouseOver is running: " << animator.isRunning("MouseOver");
++            qDebug() << "SunKen is running: " << animator.isRunning("SunKen");
++
++            // 测试 currentAnimatorTime 函数
++            qDebug() << "MouseOver current time: " << animator.currentAnimatorTime("MouseOver");
++            qDebug() << "SunKen current time: " << animator.currentAnimatorTime("SunKen");
++
++            // 测试 totalAnimationDuration 函数
++            qDebug() << "MouseOver total duration: " << animator.totalAnimationDuration("MouseOver");
++            qDebug() << "SunKen total duration: " << animator.totalAnimationDuration("SunKen");
++
++            // 测试 stopAnimator 函数
++            animator.stopAnimator("MouseOver");
++            animator.stopAnimator("SunKen");
++        }
++
++        // 测试 unboundWidget 函数
++        bool unboundResult = animator.unboundWidget();
++        qDebug() << "unboundWidget result: " << unboundResult;
++    }
++    void runConfigButtonAnimatorTests()
++    {
++        // 创建各种可能的按钮类型
++        QToolButton toolButton;
++        QPushButton pushButton;
++        QComboBox comboBox;
++        QSpinBox spinBox;
++        QDoubleSpinBox doubleSpinBox;
++
++        UKUIConfigStyleSpace::ConfigButtonAnimator animator;
++
++        // 测试 bindWidget 函数
++        bool bindResult;
++
++        // 测试 QToolButton
++        bindResult = animator.bindWidget(&toolButton);
++        qDebug() << "bindWidget for QToolButton result: " << bindResult;
++        if (bindResult) {
++            // 调用各种函数进行测试
++            testAnimatorFunctions(animator);
++            animator.unboundWidget();
++        }
++
++        // 测试 QPushButton
++        bindResult = animator.bindWidget(&pushButton);
++        qDebug() << "bindWidget for QPushButton result: " << bindResult;
++        if (bindResult) {
++            testAnimatorFunctions(animator);
++            animator.unboundWidget();
++        }
++
++        // 测试 QComboBox
++        bindResult = animator.bindWidget(&comboBox);
++        qDebug() << "bindWidget for QComboBox result: " << bindResult;
++        if (bindResult) {
++            testAnimatorFunctions(animator);
++            animator.unboundWidget();
++        }
++
++        // 测试 QSpinBox
++        bindResult = animator.bindWidget(&spinBox);
++        qDebug() << "bindWidget for QSpinBox result: " << bindResult;
++        if (bindResult) {
++            testAnimatorFunctions(animator);
++            animator.unboundWidget();
++        }
++
++        // 测试 QDoubleSpinBox
++        bindResult = animator.bindWidget(&doubleSpinBox);
++        qDebug() << "bindWidget for QDoubleSpinBox result: " << bindResult;
++        if (bindResult) {
++            testAnimatorFunctions(animator);
++            animator.unboundWidget();
++        }
++    }
++
++    // 封装一个测试动画器各种函数的函数
++    void testAnimatorFunctions(UKUIConfigStyleSpace::ConfigButtonAnimator& animator) {
++        // 测试 setAnimatorStartValue 函数
++        animator.setAnimatorStartValue("MouseOver", 0.2);
++        animator.setAnimatorStartValue("SunKen", 0.3);
++
++        // 测试 setAnimatorEndValue 函数
++        animator.setAnimatorEndValue("MouseOver", 0.8);
++        animator.setAnimatorEndValue("SunKen", 0.7);
++
++        // 测试 setAnimatorDuration 函数
++        animator.setAnimatorDuration("MouseOver", 150);
++        animator.setAnimatorDuration("SunKen", 120);
++
++        // 测试 setAnimatorDirectionForward 函数
++        animator.setAnimatorDirectionForward("MouseOver", true);
++        animator.setAnimatorDirectionForward("SunKen", false);
++
++        // 测试 startAnimator 函数
++        animator.startAnimator("MouseOver");
++        animator.startAnimator("SunKen");
++
++        // 等待一段时间让动画运行
++        QApplication::processEvents();
++        QThread::msleep(100);
++
++        // 测试 value 函数
++        qDebug() << "MouseOver value: " << animator.value("MouseOver");
++        qDebug() << "SunKen value: " << animator.value("SunKen");
++
++        // 测试 isRunning 函数
++        qDebug() << "MouseOver is running: " << animator.isRunning("MouseOver");
++        qDebug() << "SunKen is running: " << animator.isRunning("SunKen");
++
++        // 测试 currentAnimatorTime 函数
++        qDebug() << "MouseOver current time: " << animator.currentAnimatorTime("MouseOver");
++        qDebug() << "SunKen current time: " << animator.currentAnimatorTime("SunKen");
++
++        // 测试 totalAnimationDuration 函数
++        qDebug() << "MouseOver total duration: " << animator.totalAnimationDuration("MouseOver");
++        qDebug() << "SunKen total duration: " << animator.totalAnimationDuration("SunKen");
++
++        // 测试 endValue 函数
++        qDebug() << "MouseOver end value: " << animator.endValue("MouseOver");
++        qDebug() << "SunKen end value: " << animator.endValue("SunKen");
++
++        // 测试 stopAnimator 函数
++        animator.stopAnimator("MouseOver");
++        animator.stopAnimator("SunKen");
++    }
++
++    void runConfigCheckBoxAnimatorTests()
++    {
++        QCheckBox checkBox;
++        UKUIConfigStyleSpace::ConfigCheckBoxAnimator animator;
++
++        // 测试 bindWidget 函数
++        bool bindResult = animator.bindWidget(&checkBox);
++        qDebug() << "bindWidget result: " << bindResult;
++        if (bindResult) {
++            // 测试 setAnimatorStartValue 函数
++            animator.setAnimatorStartValue("OnScale", 0.2);
++            animator.setAnimatorStartValue("OnOpacity", 0.3);
++            animator.setAnimatorStartValue("OnBase", 0.4);
++            animator.setAnimatorStartValue("Off", 0.5);
++
++            // 测试 setAnimatorEndValue 函数
++            animator.setAnimatorEndValue("OnScale", 0.8);
++            animator.setAnimatorEndValue("OnOpacity", 0.7);
++            animator.setAnimatorEndValue("OnBase", 0.6);
++            animator.setAnimatorEndValue("Off", 0.5);
++
++            // 测试 setAnimatorDuration 函数
++            animator.setAnimatorDuration("OnScale", 300);
++            animator.setAnimatorDuration("OnOpacity", 200);
++            animator.setAnimatorDuration("OnBase", 250);
++            animator.setAnimatorDuration("Off", 150);
++
++            // 测试 setAnimatorDirectionForward 函数
++            animator.setAnimatorDirectionForward("OnScale", true);
++            animator.setAnimatorDirectionForward("OnOpacity", false);
++            animator.setAnimatorDirectionForward("OnBase", true);
++            animator.setAnimatorDirectionForward("Off", false);
++
++            // 测试 startAnimator 函数
++            animator.startAnimator("OnScale");
++            animator.startAnimator("OnOpacity");
++            animator.startAnimator("OnBase");
++            animator.startAnimator("Off");
++
++            // 等待一段时间让动画运行
++            QApplication::processEvents();
++            QThread::msleep(200);
++
++            // 测试 value 函数
++            qDebug() << "OnScale value: " << animator.value("OnScale");
++            qDebug() << "OnOpacity value: " << animator.value("OnOpacity");
++            qDebug() << "OnBase value: " << animator.value("OnBase");
++            qDebug() << "Off value: " << animator.value("Off");
++
++            // 测试 isRunning 函数
++            qDebug() << "OnScale is running: " << animator.isRunning("OnScale");
++            qDebug() << "OnOpacity is running: " << animator.isRunning("OnOpacity");
++            qDebug() << "OnBase is running: " << animator.isRunning("OnBase");
++            qDebug() << "Off is running: " << animator.isRunning("Off");
++
++            // 测试 currentAnimatorTime 函数
++            qDebug() << "OnScale current time: " << animator.currentAnimatorTime("OnScale");
++            qDebug() << "OnOpacity current time: " << animator.currentAnimatorTime("OnOpacity");
++            qDebug() << "OnBase current time: " << animator.currentAnimatorTime("OnBase");
++            qDebug() << "Off current time: " << animator.currentAnimatorTime("Off");
++
++            // 测试 totalAnimationDuration 函数
++            qDebug() << "OnScale total duration: " << animator.totalAnimationDuration("OnScale");
++            qDebug() << "OnOpacity total duration: " << animator.totalAnimationDuration("OnOpacity");
++            qDebug() << "OnBase total duration: " << animator.totalAnimationDuration("OnBase");
++            qDebug() << "Off total duration: " << animator.totalAnimationDuration("Off");
++
++            // 测试 setExtraProperty 函数
++            animator.setExtraProperty("nochange", true);
++            qDebug() << "nochange value: " << animator.getExtraProperty("nochange");
++
++            // 测试 stopAnimator 函数
++            animator.stopAnimator("OnScale");
++            animator.stopAnimator("OnOpacity");
++            animator.stopAnimator("OnBase");
++            animator.stopAnimator("Off");
++        }
++
++        // 测试 unboundWidget 函数
++        bool unboundResult = animator.unboundWidget();
++        qDebug() << "unboundWidget result: " << unboundResult;
++    }
++    void runConfigProgressBarAnimationTests()
++    {
++        QProgressBar progressBar;
++        UKUIConfigStyleSpace::ConfigProgressBarAnimation animator(&progressBar);
++
++        // 测试 init 函数
++        qDebug() << "Duration: " << animator.duration();
++        qDebug() << "Start value: " << animator.startValue();
++        qDebug() << "End value: " << animator.endValue();
++        qDebug() << "Direction: " << animator.direction();
++        qDebug() << "Easing curve: " << animator.easingCurve();
++
++
++        // 测试 target 函数
++        QWidget *targetWidget = animator.target();
++        qDebug() << "Target widget: " << targetWidget;
++
++
++        // 测试 valueChanged 和 finished 信号连接
++        animator.start();
++        QApplication::processEvents();
++        QThread::msleep(500);
++
++
++        // 测试修改动画参数
++        animator.setStartValue(0.2);
++        animator.setEndValue(0.8);
++        animator.setDuration(3000);
++        animator.setDirection(QAbstractAnimation::Backward);
++        animator.setEasingCurve(QEasingCurve::OutCubic);
++
++
++        // 再次测试参数是否修改成功
++        qDebug() << "Modified Duration: " << animator.duration();
++        qDebug() << "Modified Start value: " << animator.startValue();
++        qDebug() << "Modified End value: " << animator.endValue();
++        qDebug() << "Modified Direction: " << animator.direction();
++        qDebug() << "Modified Easing curve: " << animator.easingCurve();
++
++
++        // 重新启动动画以查看修改后的效果
++        animator.start();
++        QApplication::processEvents();
++        QThread::msleep(500);
++
++
++        // 测试暂停和恢复动画
++//        animator.pause();
++//        qDebug() << "Is paused: " << animator.state() == QAbstractAnimation::Paused;
++//        animator.resume();
++//        qDebug() << "Is resumed: " << animator.state() == QAbstractAnimation::Running;
++
++
++//        // 测试停止动画
++//        animator.stop();
++//        qDebug() << "Is stopped: " << animator.state() == QAbstractAnimation::Stopped;
++
++
++        // 测试当前时间和总时长
++        qDebug() << "Current time: " << animator.currentTime();
++        qDebug() << "Total duration: " << animator.totalDuration();
++    }
++    void runConfigRadioButtonAnimatorTests()
++    {
++        QRadioButton radioButton;
++        UKUIConfigStyleSpace::ConfigRadioButtonAnimator animator;
++
++        // 测试 bindWidget 函数
++        bool bindResult = animator.bindWidget(&radioButton);
++        qDebug() << "bindWidget result: " << bindResult;
++        if (bindResult) {
++            // 测试 setAnimatorStartValue 函数
++            animator.setAnimatorStartValue("SunKenOn", 0.2);
++            animator.setAnimatorStartValue("Off", 0.8);
++
++            // 测试 setAnimatorEndValue 函数
++            animator.setAnimatorEndValue("SunKenOn", 0.8);
++            animator.setAnimatorEndValue("Off", 0.2);
++
++            // 测试 setAnimatorDuration 函数
++            animator.setAnimatorDuration("SunKenOn", 300);
++            animator.setAnimatorDuration("Off", 150);
++
++            // 测试 setAnimatorDirectionForward 函数
++            animator.setAnimatorDirectionForward("SunKenOn", true);
++            animator.setAnimatorDirectionForward("Off", false);
++
++            // 测试 startAnimator 函数
++            animator.startAnimator("SunKenOn");
++            animator.startAnimator("Off");
++
++            // 等待一段时间让动画运行
++            QApplication::processEvents();
++            QThread::msleep(200);
++
++            // 测试 value 函数
++            qDebug() << "SunKenOn value: " << animator.value("SunKenOn");
++            qDebug() << "Off value: " << animator.value("Off");
++
++            // 测试 isRunning 函数
++            qDebug() << "SunKenOn is running: " << animator.isRunning("SunKenOn");
++            qDebug() << "Off is running: " << animator.isRunning("Off");
++
++            // 测试 currentAnimatorTime 函数
++            qDebug() << "SunKenOn current time: " << animator.currentAnimatorTime("SunKenOn");
++            qDebug() << "Off current time: " << animator.currentAnimatorTime("Off");
++
++            // 测试 totalAnimationDuration 函数
++            qDebug() << "SunKenOn total duration: " << animator.totalAnimationDuration("SunKenOn");
++            qDebug() << "Off total duration: " << animator.totalAnimationDuration("Off");
++
++            // 测试 stopAnimator 函数
++            animator.stopAnimator("SunKenOn");
++            animator.stopAnimator("Off");
++        }
++
++        // 测试 unboundWidget 函数
++        bool unboundResult = animator.unboundWidget();
++        qDebug() << "unboundWidget result: " << unboundResult;
++    }
++    void runConfigTreeAnimatorTests()
++    {
++        QTreeView treeView;
++        UKUIConfigStyleSpace::ConfigTreeAnimator animator;
++
++        // 测试 bindWidget 函数
++        bool bindResult = animator.bindWidget(&treeView);
++        qDebug() << "bindWidget result: " << bindResult;
++        if (bindResult) {
++            // 测试 setAnimatorStartValue 函数
++            animator.setAnimatorStartValue("expand", 0.2);
++            animator.setAnimatorStartValue("collaps", 0.3);
++
++            // 测试 setAnimatorEndValue 函数
++            animator.setAnimatorEndValue("expand", 0.8);
++            animator.setAnimatorEndValue("collaps", 0.7);
++
++            // 测试 setAnimatorDuration 函数
++            animator.setAnimatorDuration("expand", 300);
++            animator.setAnimatorDuration("collaps", 250);
++
++            // 测试 setAnimatorDirectionForward 函数
++            animator.setAnimatorDirectionForward("expand", true);
++            animator.setAnimatorDirectionForward("collaps", false);
++
++            // 测试 startAnimator 函数
++            animator.startAnimator("expand");
++            animator.startAnimator("collaps");
++
++            // 等待一段时间让动画运行
++            QApplication::processEvents();
++            QThread::msleep(200);
++
++            // 测试 value 函数
++            qDebug() << "expand value: " << animator.value("expand");
++            qDebug() << "collaps value: " << animator.value("collaps");
++
++            // 测试 isRunning 函数
++            qDebug() << "expand is running: " << animator.isRunning("expand");
++            qDebug() << "collaps is running: " << animator.isRunning("collaps");
++
++            // 测试 currentAnimatorTime 函数
++            qDebug() << "expand current time: " << animator.currentAnimatorTime("expand");
++            qDebug() << "collaps current time: " << animator.currentAnimatorTime("collaps");
++
++            // 测试 totalAnimationDuration 函数
++            qDebug() << "expand total duration: " << animator.totalAnimationDuration("expand");
++            qDebug() << "collaps total duration: " << animator.totalAnimationDuration("collaps");
++
++            // 测试 animatorStartValue 函数
++            qDebug() << "expand start value: " << animator.animatorStartValue("expand");
++            qDebug() << "collaps start value: " << animator.animatorStartValue("collaps");
++
++            // 测试 animatorEndValue 函数
++            qDebug() << "expand end value: " << animator.animatorEndValue("expand");
++            qDebug() << "collaps end value: " << animator.animatorEndValue("collaps");
++
++            // 测试 stopAnimator 函数
++            animator.stopAnimator("expand");
++            animator.stopAnimator("collaps");
++
++            // 测试 setExtraProperty 函数
++            QModelIndex index1, index2;
++            animator.setExtraProperty("expandItem", index1);
++            animator.setExtraProperty("collapsItem", index2);
++
++            // 测试 getExtraProperty 函数
++            qDebug() << "expandItem: " << animator.getExtraProperty("expandItem");
++            qDebug() << "collapsItem: " << animator.getExtraProperty("collapsItem");
++        }
++
++        // 测试 unboundWidget 函数
++        bool unboundResult = animator.unboundWidget();
++        qDebug() << "unboundWidget result: " << unboundResult;
++    }
++
++
++    void runUKUIConfigStyleDrawControlTests()
++    {
++        QWidget widget;
++        UKUIConfigStyle style("testDrawControlStyle");
++
++        // 获取系统自带图标
++        QIcon systemIcon = QIcon::fromTheme("application-x-desktop");
++        QPixmap icon = systemIcon.pixmap(QSize(16, 16)); // 可以根据需要调整图标的大小
++
++
++        // 测试 CE_PushButton
++        {
++            QStyleOptionButton buttonOption;
++            buttonOption.state = QStyle::State_Enabled | QStyle::State_Raised;
++            buttonOption.text = "Test Button";
++            buttonOption.icon = systemIcon;
++            QImage image(200, 50, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_PushButton, &buttonOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ScrollBarAddLine
++        {
++            QStyleOptionSlider sliderOption;
++            sliderOption.orientation = Qt::Horizontal;
++            sliderOption.state = QStyle::State_Enabled | QStyle::State_MouseOver;
++            sliderOption.minimum = 0;
++            sliderOption.maximum = 100;
++//            sliderOption.icon = systemIcon;
++            QImage image(200, 20, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ScrollBarAddLine, &sliderOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ScrollBarSubLine
++        {
++            QStyleOptionSlider sliderOption;
++            sliderOption.orientation = Qt::Horizontal;
++            sliderOption.state = QStyle::State_Enabled | QStyle::State_MouseOver;
++            sliderOption.minimum = 0;
++            sliderOption.maximum = 100;
++//            sliderOption.icon = systemIcon;
++            QImage image(200, 20, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ScrollBarSubLine, &sliderOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ScrollBarSlider
++        {
++            QStyleOptionSlider sliderOption;
++            sliderOption.orientation = Qt::Horizontal;
++            sliderOption.state = QStyle::State_Enabled | QStyle::State_MouseOver;
++            sliderOption.minimum = 0;
++            sliderOption.maximum = 100;
++            sliderOption.sliderPosition = 50;
++//            sliderOption.icon = systemIcon;
++            QImage image(200, 20, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ScrollBarSlider, &sliderOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_TabBarTabShape
++        {
++            QStyleOptionTab tabOption;
++            tabOption.state = QStyle::State_Selected;
++            tabOption.text = "Tab 1";
++            tabOption.icon = systemIcon;
++            QImage image(150, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_TabBarTabShape, &tabOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_TabBarTabLabel
++        {
++            QStyleOptionTab tabOption;
++            tabOption.state = QStyle::State_Selected;
++            tabOption.text = "Tab 1";
++            tabOption.icon = systemIcon;
++            QImage image(150, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_TabBarTabLabel, &tabOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_TabBarTab
++        {
++            QStyleOptionTab tabOption;
++            tabOption.state = QStyle::State_Selected;
++            tabOption.text = "Tab 1";
++            tabOption.icon = systemIcon;
++            QImage image(150, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_TabBarTab, &tabOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_CheckBox
++        {
++            QStyleOptionButton checkBoxOption;
++            checkBoxOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            checkBoxOption.text = "Check Box";
++            checkBoxOption.icon = systemIcon;
++            QImage image(150, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_CheckBox, &checkBoxOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_CheckBoxLabel
++        {
++            QStyleOptionButton checkBoxOption;
++            checkBoxOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            checkBoxOption.text = "Check Box Label";
++            checkBoxOption.icon = systemIcon;
++            QImage image(150, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_CheckBoxLabel, &checkBoxOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_MenuBarItem
++        {
++            QStyleOptionMenuItem menuItemOption;
++            menuItemOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            menuItemOption.text = "Menu Bar Item";
++            menuItemOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_MenuBarItem, &menuItemOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ToolBoxTabShape
++        {
++            QStyleOptionToolBox toolBoxOption;
++            toolBoxOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            toolBoxOption.text = "Tool Box Tab Shape";
++            toolBoxOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ToolBoxTabShape, &toolBoxOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ToolBoxTabLabel
++        {
++            QStyleOptionToolBox toolBoxOption;
++            toolBoxOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            toolBoxOption.text = "Tool Box Tab Label";
++            toolBoxOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ToolBoxTabLabel, &toolBoxOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ToolBoxTab
++        {
++            QStyleOptionToolBox toolBoxOption;
++            toolBoxOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            toolBoxOption.text = "Tool Box Tab";
++            toolBoxOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ToolBoxTab, &toolBoxOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ProgressBarGroove
++        {
++            QStyleOptionProgressBar progressBarOption;
++            progressBarOption.minimum = 0;
++            progressBarOption.maximum = 100;
++            progressBarOption.progress = 50;
++            progressBarOption.textVisible = true;
++            progressBarOption.text = "50%";
++//            progressBarOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ProgressBarGroove, &progressBarOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ProgressBarContent
++        {
++            QStyleOptionProgressBar progressBarOption;
++            progressBarOption.minimum = 0;
++            progressBarOption.maximum = 100;
++            progressBarOption.progress = 50;
++            progressBarOption.textVisible = true;
++            progressBarOption.text = "50%";
++//            progressBarOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ProgressBarContents, &progressBarOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ProgressBarLabel
++        {
++            QStyleOptionProgressBar progressBarOption;
++            progressBarOption.minimum = 0;
++            progressBarOption.maximum = 100;
++            progressBarOption.progress = 50;
++            progressBarOption.textVisible = true;
++            progressBarOption.text = "50%";
++//            progressBarOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ProgressBarLabel, &progressBarOption, &imagePainter, &widget);
++        }
+ 
+-        HighLightEffect::setSkipEffect(&w, true);
++
++        // 测试 CE_ProgressBar
++        {
++            QStyleOptionProgressBar progressBarOption;
++            progressBarOption.minimum = 0;
++            progressBarOption.maximum = 100;
++            progressBarOption.progress = 50;
++            progressBarOption.textVisible = true;
++            progressBarOption.text = "50%";
++//            progressBarOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ProgressBar, &progressBarOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_HeaderSection
++        {
++            QStyleOptionHeader headerOption;
++            headerOption.state = QStyle::State_Enabled;
++            headerOption.text = "Header Section";
++            headerOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_HeaderSection, &headerOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_HeaderLabel
++        {
++            QStyleOptionHeader headerOption;
++            headerOption.state = QStyle::State_Enabled;
++            headerOption.text = "Header Label";
++            headerOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_HeaderLabel, &headerOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_HeaderEmptyArea
++        {
++            QStyleOptionHeader headerOption;
++            headerOption.state = QStyle::State_Enabled;
++            headerOption.text = "Header Empty Area";
++            headerOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_HeaderEmptyArea, &headerOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_Header
++        {
++            QStyleOptionHeader headerOption;
++            headerOption.state = QStyle::State_Enabled;
++            headerOption.text = "Header";
++            headerOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_Header, &headerOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ItemViewItem
++        {
++            QStyleOptionViewItem itemOption;
++            itemOption.text = "Item 1";
++            itemOption.state = QStyle::State_Selected;
++            itemOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ItemViewItem, &itemOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ShapedFrame
++        {
++            QStyleOptionFrame frameOption;
++            frameOption.frameShape = QFrame::Box;
++            frameOption.state = QStyle::State_Raised;
++//            frameOption.icon = systemIcon;
++            QImage image(200, 200, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ShapedFrame, &frameOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ComboBox
++        {
++            QStyleOptionComboBox comboBoxOption;
++            comboBoxOption.state = QStyle::State_Enabled;
++            comboBoxOption.currentText = "Select Option";
++//            comboBoxOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_MenuItem
++        {
++            QStyleOptionMenuItem menuItemOption;
++            menuItemOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            menuItemOption.text = "Menu Item";
++            menuItemOption.icon = systemIcon;
++            QImage image(200, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_MenuItem, &menuItemOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_ToolButton
++        {
++            QStyleOptionToolButton toolButtonOption;
++            toolButtonOption.state = QStyle::State_Enabled | QStyle::State_MouseOver;
++            toolButtonOption.text = "Tool Button";
++            toolButtonOption.icon = systemIcon;
++            QImage image(100, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_ToolButtonLabel, &toolButtonOption, &imagePainter, &widget);
++        }
++
++
++        // 测试 CE_RadioButton
++        {
++            QStyleOptionButton radioButtonOption;
++            radioButtonOption.state = QStyle::State_Enabled | QStyle::State_Selected;
++            radioButtonOption.text = "Radio Button";
++            radioButtonOption.icon = systemIcon;
++            QImage image(150, 30, QImage::Format_ARGB32);
++            image.fill(Qt::transparent);
++            QPainter imagePainter(&image);
++            style.drawControl(QStyle::CE_RadioButton, &radioButtonOption, &imagePainter, &widget);
++        }
++
++
++        // 测试布局方向
++        {
++            QStyleOptionButton buttonOption;
++            buttonOption.state = QStyle::State_Enabled;
++            buttonOption.text = "Test Button";
++            buttonOption.icon = systemIcon;
++            QImage leftToRightImage(200, 50, QImage::Format_ARGB32);
++            QImage rightToLeftImage(200, 50, QImage::Format_ARGB32);
++            leftToRightImage.fill(Qt::transparent);
++            rightToLeftImage.fill(Qt::transparent);
++            QPainter leftToRightPainter(&leftToRightImage);
++            QPainter rightToLeftPainter(&rightToLeftImage);
++            QGuiApplication::setLayoutDirection(Qt::LeftToRight);
++            style.drawControl(QStyle::CE_PushButton, &buttonOption, &leftToRightPainter, &widget);
++            QGuiApplication::setLayoutDirection(Qt::RightToLeft);
++            style.drawControl(QStyle::CE_PushButton, &buttonOption, &rightToLeftPainter, &widget);
++        }
++    }
++    void testSizeFromContents()
++    {
++        UKUIConfigStyle style("testSizeFromContentsStyle");
++
++        // 测试 CT_MenuItem
++        {
++            QStyleOptionMenuItem menuItem;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_MenuItem, &menuItem, size, &widget);
++        }
++
++        // 测试 CT_LineEdit
++        {
++            QStyleOptionFrame frameOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_LineEdit, &frameOption, size, &widget);
++        }
++
++        // 测试 CT_TabBarTab
++        {
++            QStyleOptionTab tabOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_TabBarTab, &tabOption, size, &widget);
++        }
++
++        // 测试 CT_RadioButton
++        {
++            QStyleOptionButton radioButtonOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_RadioButton, &radioButtonOption, size, &widget);
++        }
++
++        // 测试 CT_CheckBox
++        {
++            QStyleOptionButton checkBoxOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_CheckBox, &checkBoxOption, size, &widget);
++        }
++
++        // 测试 CT_ToolButton
++        {
++            QStyleOptionToolButton toolButtonOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_ToolButton, &toolButtonOption, size, &widget);
++        }
++
++        // 测试 CT_PushButton
++        {
++            QStyleOptionButton pushButtonOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_PushButton, &pushButtonOption, size, &widget);
++        }
++
++        // 测试 CT_ComboBox
++        {
++            QStyleOptionComboBox comboBoxOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_ComboBox, &comboBoxOption, size, &widget);
++        }
++
++        // 测试 CT_SpinBox
++        {
++            QStyleOptionSpinBox spinBoxOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_SpinBox, &spinBoxOption, size, &widget);
++        }
++
++        // 测试 CT_ProgressBar
++        {
++            QStyleOptionProgressBar progressBarOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_ProgressBar, &progressBarOption, size, &widget);
++        }
++
++        // 测试 CT_Slider
++        {
++            QStyleOptionSlider sliderOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_Slider, &sliderOption, size, &widget);
++        }
++
++        // 测试 CT_HeaderSection
++        {
++            QStyleOptionHeader headerOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_HeaderSection, &headerOption, size, &widget);
++        }
++
++        // 测试 CT_ItemViewItem
++        {
++            QStyleOptionViewItem viewItemOption;
++            QWidget widget;
++            QSize size(100, 20);
++            style.sizeFromContents(UKUIConfigStyle::CT_ItemViewItem, &viewItemOption, size, &widget);
++        }
++    }
++
++    void testFileDialog(){
++//        QWindow *w1 = new QWindow();
++//        UKUIFileDialog::KyFileDialogHelper*help = new UKUIFileDialog::KyFileDialogHelper();
++//        bool ishow = help->isShow();
++//        help->show(Qt::Widget,Qt::ApplicationModal,w1);
++        QWidget *w1 = new QWidget();
++//        QFileDialog *a = new QFileDialog(w1);
++        UKUIFileDialog::KyNativeFileDialog *a = new UKUIFileDialog::KyNativeFileDialog(w1);
++//        a->setDirectory(QString("file://%1").arg(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)));
++        a->setViewMode(UKUIFileDialog::KyNativeFileDialog::List);
++        a->setAcceptMode(QFileDialog::AcceptSave);
++        a->setCurrentInputName("test");
++        a->setLabelText(QFileDialog::FileName, "test");
++
++//        QStringList nameFilters;
++//        nameFilters << "txt";
++//        nameFilters << "*";
++//        a->setNameFilters(nameFilters);
++
++        a->exec();
+     }
+ };
+ 
+@@ -46,3 +1774,4 @@ private slots:
+ QTEST_MAIN(LibFunctionTest)
+ 
+ #include "test-settings.moc"
++
+diff --git a/ukui-styles/blur-helper.h b/ukui-styles/blur-helper.h
+index fae5cf8..3704e8b 100644
+--- a/ukui-styles/blur-helper.h
++++ b/ukui-styles/blur-helper.h
+@@ -42,9 +42,9 @@ public:
+ 
+     bool shouldSkip(QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+     void onBlurEnableChanged(bool enable);
+     void onWidgetDestroyed(QWidget *widget);
+     void delayUpdate(QWidget *w, bool updateBlurRegionOnly = false);
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-box-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-box-animation-helper.h
+index c3a56f4..72f23ed 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-box-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-box-animation-helper.h
+@@ -41,9 +41,9 @@ public:
+ 
+     AnimatorIface *animator(const QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+ };
+ }
+ 
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-box-animator.h b/ukui-styles/qt5-config-style-ukui/animations/config-box-animator.h
+index bd89a38..4f4a48d 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-box-animator.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-box-animator.h
+@@ -53,7 +53,7 @@ public:
+     int currentAnimatorTime(const QString &property = nullptr);
+     int totalAnimationDuration(const QString &property = nullptr);
+ 
+-signals:
++Q_SIGNALS:
+ 
+ private:
+     QWidget* m_widget = nullptr;
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-button-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-button-animation-helper.h
+index 8914ff8..03dc57a 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-button-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-button-animation-helper.h
+@@ -41,9 +41,9 @@ public:
+ 
+     AnimatorIface *animator(const QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+ };
+ }
+ #endif // BUTTONANIMATIONHELPER_H
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-button-animator.h b/ukui-styles/qt5-config-style-ukui/animations/config-button-animator.h
+index a027767..6c1b24d 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-button-animator.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-button-animator.h
+@@ -57,7 +57,7 @@ public:
+     int totalAnimationDuration(const QString &property = nullptr);
+     QVariant endValue(const QString &property = nullptr);
+ 
+-signals:
++Q_SIGNALS:
+ 
+ private:
+     QWidget* m_widget = nullptr;
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animation-helper.h
+index 3c285dc..e03e7e7 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animation-helper.h
+@@ -41,9 +41,9 @@ public:
+ 
+     AnimatorIface *animator(const QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+ };
+ }
+ #endif // CHECKBOXANIMATIONHELPER_H
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animator.h b/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animator.h
+index e4ba293..e806e12 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animator.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-checkbox-animator.h
+@@ -56,7 +56,7 @@ public:
+     void setExtraProperty(const QString &property, const QVariant &value);
+     QVariant getExtraProperty(const QString &property);
+ 
+-signals:
++Q_SIGNALS:
+ 
+ private:
+     QWidget* m_widget = nullptr;
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-progressbar-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-progressbar-animation-helper.h
+index e06484a..cd18cbb 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-progressbar-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-progressbar-animation-helper.h
+@@ -41,7 +41,7 @@ public:
+     void stopAnimation(QObject *target);
+     QVariantAnimation* animation(QObject *target);
+ 
+-public slots:
++public Q_SLOTS:
+     void _q_removeAnimation();
+ 
+ private:
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animation-helper.h
+index 542d48d..bc15de2 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animation-helper.h
+@@ -41,9 +41,9 @@ public:
+ 
+     AnimatorIface *animator(const QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+ };
+ }
+ #endif // RADIOBUTTONANIMATIONHELPER_H
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animator.h b/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animator.h
+index 5c66fd2..ab855dc 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animator.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-radiobutton-animator.h
+@@ -54,7 +54,7 @@ public:
+     void setAnimatorCurrentTime(const QString &property = nullptr, const int msecs = 0);
+     int totalAnimationDuration(const QString &property = nullptr);
+ 
+-signals:
++Q_SIGNALS:
+ 
+ private:
+     QWidget* m_widget = nullptr;
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-scrollbar-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-scrollbar-animation-helper.h
+index 7333706..901e5f3 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-scrollbar-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-scrollbar-animation-helper.h
+@@ -39,9 +39,9 @@ public:
+ 
+     AnimatorIface *animator(const QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+ };
+ }
+ #endif // SCROLLBARANIMATIONHELPER_H
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-slider-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-slider-animation-helper.h
+index 673501f..4660ec6 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-slider-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-slider-animation-helper.h
+@@ -39,9 +39,9 @@ public:
+ 
+     AnimatorIface *animator(const QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+ };
+ }
+ #endif // SLIDERANIMATIONHELPER_H
+diff --git a/ukui-styles/qt5-config-style-ukui/animations/config-tree-animation-helper.h b/ukui-styles/qt5-config-style-ukui/animations/config-tree-animation-helper.h
+index 8eea5ef..ee2fb68 100644
+--- a/ukui-styles/qt5-config-style-ukui/animations/config-tree-animation-helper.h
++++ b/ukui-styles/qt5-config-style-ukui/animations/config-tree-animation-helper.h
+@@ -38,9 +38,9 @@ public:
+ 
+     AnimatorIface *animator(const QWidget *w);
+ 
+-signals:
++Q_SIGNALS:
+ 
+-public slots:
++public Q_SLOTS:
+ };
+ }
+ #endif // TREEANIMATIONHELPER_H
diff -Nru qt5-ukui-platformtheme-4.1.0.0/debian/patches/series qt5-ukui-platformtheme-4.1.0.0/debian/patches/series
--- qt5-ukui-platformtheme-4.1.0.0/debian/patches/series	2024-11-08 09:49:00.000000000 +0800
+++ qt5-ukui-platformtheme-4.1.0.0/debian/patches/series	2024-11-08 09:49:00.000000000 +0800
@@ -74,3 +74,6 @@
 0074-Translated-using-Weblate-Uyghur.patch
 0075-Translated-using-Weblate-Uyghur.patch
 0076-Update-changelog-2024.11.08-4.1.0.0-ok53.patch
+0077-.patch
+0078-pc.patch
+0079-Refine-unit-test-cases.patch