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