Browse Source

V0.2
1、重新修改了程序构建方式
2、添加了UIStyle管理器

apple 3 weeks ago
parent
commit
e2a92deaef
73 changed files with 1204 additions and 55 deletions
  1. 1 0
      .gitignore
  2. 191 0
      CMakeLists.txt
  3. 0 16
      Resources/Resources.qrc
  4. 0 0
      SettingLibrary/ACAServerSetInfo.pro
  5. 82 0
      SettingLibrary/CMakeLists.txt
  6. 0 0
      SettingLibrary/DataBase/entities.cpp
  7. 0 0
      SettingLibrary/DataBase/entities.h
  8. 117 0
      SettingLibrary/DialogBase/DialogBase.cpp
  9. 64 0
      SettingLibrary/DialogBase/DialogBase.h
  10. 0 0
      SettingLibrary/Modules/AICompare/aicomparewidget.cpp
  11. 0 0
      SettingLibrary/Modules/AICompare/aicomparewidget.h
  12. 0 0
      SettingLibrary/Modules/AICompare/aicomparewidget.ui
  13. 0 0
      SettingLibrary/Modules/Basic/basicwidget.cpp
  14. 0 0
      SettingLibrary/Modules/Basic/basicwidget.h
  15. 0 0
      SettingLibrary/Modules/Basic/basicwidget.ui
  16. 0 0
      SettingLibrary/Modules/Basic/compareitemdialog.cpp
  17. 0 0
      SettingLibrary/Modules/Basic/compareitemdialog.h
  18. 0 0
      SettingLibrary/Modules/Basic/compareitemdialog.ui
  19. 0 0
      SettingLibrary/Modules/Basic/compareitemlistdialog.cpp
  20. 0 0
      SettingLibrary/Modules/Basic/compareitemlistdialog.h
  21. 0 0
      SettingLibrary/Modules/Basic/compareitemlistdialog.ui
  22. 0 0
      SettingLibrary/Modules/Basic/compareitmedetaildialog.cpp
  23. 0 0
      SettingLibrary/Modules/Basic/compareitmedetaildialog.h
  24. 0 0
      SettingLibrary/Modules/Basic/compareitmedetaildialog.ui
  25. 0 0
      SettingLibrary/Modules/Basic/singlecompareroadwidget.cpp
  26. 0 0
      SettingLibrary/Modules/Basic/singlecompareroadwidget.h
  27. 0 0
      SettingLibrary/Modules/Basic/singlecompareroadwidget.ui
  28. 0 0
      SettingLibrary/Modules/CheckPeriod/addperioddialog.cpp
  29. 0 0
      SettingLibrary/Modules/CheckPeriod/addperioddialog.h
  30. 0 0
      SettingLibrary/Modules/CheckPeriod/addperioddialog.ui
  31. 0 0
      SettingLibrary/Modules/CheckPeriod/checkperiodwidget.cpp
  32. 0 0
      SettingLibrary/Modules/CheckPeriod/checkperiodwidget.h
  33. 0 0
      SettingLibrary/Modules/CheckPeriod/checkperiodwidget.ui
  34. 0 0
      SettingLibrary/Modules/Database/databasewidget.cpp
  35. 0 0
      SettingLibrary/Modules/Database/databasewidget.h
  36. 0 0
      SettingLibrary/Modules/Database/databasewidget.ui
  37. 0 0
      SettingLibrary/Modules/Noise/noisemonitorparamdialog.cpp
  38. 0 0
      SettingLibrary/Modules/Noise/noisemonitorparamdialog.h
  39. 0 0
      SettingLibrary/Modules/Noise/noisemonitorparamdialog.ui
  40. 0 0
      SettingLibrary/Modules/Noise/noisewidget.cpp
  41. 0 0
      SettingLibrary/Modules/Noise/noisewidget.h
  42. 0 0
      SettingLibrary/Modules/Noise/noisewidget.ui
  43. 5 0
      SettingLibrary/Resources/QSS.qrc
  44. 16 0
      SettingLibrary/Resources/Resources.qrc
  45. 0 0
      SettingLibrary/Resources/icon/add.png
  46. 0 0
      SettingLibrary/Resources/icon/add_hover.png
  47. 0 0
      SettingLibrary/Resources/icon/checked.png
  48. 0 0
      SettingLibrary/Resources/icon/close.png
  49. 0 0
      SettingLibrary/Resources/icon/close_hover.png
  50. 0 0
      SettingLibrary/Resources/icon/del.png
  51. 0 0
      SettingLibrary/Resources/icon/del_hover.png
  52. 0 0
      SettingLibrary/Resources/icon/down_arrow.png
  53. 0 0
      SettingLibrary/Resources/icon/offswitch.png
  54. 0 0
      SettingLibrary/Resources/icon/onswitch.png
  55. 0 0
      SettingLibrary/Resources/icon/tip.png
  56. 0 0
      SettingLibrary/Resources/icon/unchecked.png
  57. 39 0
      SettingLibrary/Resources/qss/white/setinfowidget.qss
  58. 133 0
      SettingLibrary/UIStyle/UIStyleManager.cpp
  59. 85 0
      SettingLibrary/UIStyle/UIStyleManager.h
  60. 0 0
      SettingLibrary/acaserversetinfo.cpp
  61. 0 0
      SettingLibrary/acaserversetinfo.h
  62. 0 0
      SettingLibrary/setinfomanager.cpp
  63. 0 0
      SettingLibrary/setinfomanager.h
  64. 11 0
      SettingLibrary/setinfowidget.cpp
  65. 4 0
      SettingLibrary/setinfowidget.h
  66. 1 39
      SettingLibrary/setinfowidget.ui
  67. 59 0
      show1/CMakeLists.txt
  68. 128 0
      show1/SettingLibAPI/settingAPI.cpp
  69. 124 0
      show1/SettingLibAPI/settingAPI.h
  70. 60 0
      show1/main.cpp
  71. 41 0
      show1/widget.cpp
  72. 22 0
      show1/widget.h
  73. 21 0
      show1/widget.ui

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+/External

+ 191 - 0
CMakeLists.txt

@@ -0,0 +1,191 @@
+cmake_minimum_required(VERSION 3.10)
+
+project(ACAServerSettingLibrary VERSION 1.1 LANGUAGES CXX)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+#=========================================================
+#*******************  设置可执行文件名称 ******************
+#=========================================================
+
+
+
+#=========================================================
+#*****************  设置可执行文件输出位置 ****************
+#=========================================================
+
+#设置可执行文件和库位置,可能是qt tools的bug,选择32位依旧是64位编译器
+if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+    # message(STATUS "Using Linux System")
+    if(CMAKE_BUILD_TYPE MATCHES Debug)
+        set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Debug)
+        set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Debug)
+    elseif(CMAKE_BUILD_TYPE MATCHES Release)
+        set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Release)
+        set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Release)
+    endif()
+elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
+    # message(STATUS "Using Windows System")
+    if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+        message(STATUS "Using Compiler : ${CMAKE_CXX_COMPILER_ID}")
+        #设置日志库的位置,判断32位和64位,CMAKE_CL_64已经被废弃
+        if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+            # message(STATUS "Using 64bit Compiler")
+            #设置可执行文件输出位置
+            set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_GNU_64)
+            #设置库生成位置
+            set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU_64)
+        elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+            # message(STATUS "Using 32bit Compiler")
+            #设置可执行文件输出位置
+            set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_GNU_32)
+            #设置库生成位置
+            set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_GNU_32)
+        endif()
+    elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+        #不支持MSVC
+        # message(FATAL_ERROR "MSVC is not supported")
+        #设置可执行文件输出位置
+        set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_MSVC)
+        #设置库生成位置
+        set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_MSVC)
+    endif()
+elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
+    # message(STATUS "Using MacOS System")
+    if(CMAKE_BUILD_TYPE MATCHES Debug)
+        set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Debug)
+        set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Debug)
+    elseif(CMAKE_BUILD_TYPE MATCHES Release)
+        set(exec_out_path ${CMAKE_SOURCE_DIR}/../bin_Release)
+        set(BUILD_LIB_PATH ${CMAKE_SOURCE_DIR}/../bin_Release)
+    endif()
+else()
+    message(FATAL_ERROR "Unknown System")
+endif()
+
+
+#设置库和可执行文件的输出位置
+set(EXECUTABLE_OUTPUT_PATH ${exec_out_path})
+set(LIBRARY_OUTPUT_PATH ${exec_out_path})
+
+#指定库的位置,方便寻找
+link_directories(${BUILD_LIB_PATH})
+
+
+#=========================================================
+#*******************  定义一些参数变量 *******************
+#=========================================================
+
+#设置MSVC的一些编译属性
+if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+    #设置MSVC使用UTF-8,这一句是必须的,否则中文会乱码,添加这一句,也不是设置为UTF-8 with BOM编码格式了
+    add_compile_options(
+      "$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>"
+      "$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:utf-8>"
+    )
+    #消除MSVC对SPDLOG的兼容性警告
+    add_compile_definitions("_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING")
+    #添加MSVC的宏定义
+    add_compile_definitions(MSVC)
+endif()
+
+#添加一些gcc的编译属性
+if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+#    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
+#    #添加编译参数,这个参数会应用到全局,C和C++都会生效
+   add_compile_options(-Wall -O2)
+    #添加GCC的宏定义
+    add_compile_definitions(GCC)
+endif()
+
+
+
+#定义一些宏
+if(CMAKE_BUILD_TYPE MATCHES Debug)
+    add_compile_definitions(C_DEBUG)
+elseif(CMAKE_BUILD_TYPE MATCHES Release)
+    add_compile_definitions(C_RELEASE)
+endif()
+
+if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
+    add_compile_definitions(MSVC)
+elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU)
+    add_compile_definitions(GNU)
+endif()
+
+
+#需要定义这个宏,才会使用编译好的动态库
+add_compile_definitions(SPDLOG_COMPILED_LIB)
+#给spdlog添加宏定义,使其支持%#等源文件相关的标志
+add_compile_definitions(SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE)
+#使用spdlog的静态库
+option(ENABLE_SPDLOG_STATIC_LIB "Enable spdlog static library" ON)
+
+
+#=========================================================
+#*********************  搜索添加包 **********************
+#=========================================================
+
+find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
+
+find_package(Qt${QT_VERSION_MAJOR} COMPONENTS
+    Widgets
+    Core
+    # SerialPort
+    Network
+    REQUIRED
+)
+
+#Qt5
+if(QT_VERSION_MAJOR EQUAL 5)
+    find_package(Qt${QT_VERSION_MAJOR} COMPONENTS
+        OpenGL
+        REQUIRED
+    )
+
+#Qt6
+elseif(QT_VERSION_MAJOR EQUAL 6)
+    find_package(Qt${QT_VERSION_MAJOR} COMPONENTS
+        OpenGLWidgets
+        REQUIRED
+    )
+    
+endif(QT_VERSION_MAJOR EQUAL 5)
+
+
+
+include(${CMAKE_SOURCE_DIR}/External/Libraries/Libraries.cmake)
+# include(${CMAKE_SOURCE_DIR}/External_Ex/Library_EX.cmake)
+
+
+#=========================================================
+#****************  搜索添加头文件和源文件 *****************
+#=========================================================
+
+
+#包含头文件
+include_directories(
+
+)
+
+#包含源文件
+file(GLOB GLOBAL_SRC
+
+)
+
+
+#=========================================================
+#********************  生成可执行程序 ********************
+#=========================================================
+
+
+add_subdirectory(${CMAKE_SOURCE_DIR}/SettingLibrary)
+add_subdirectory(${CMAKE_SOURCE_DIR}/show1)
+
+

+ 0 - 16
Resources/Resources.qrc

@@ -1,16 +0,0 @@
-<RCC>
-    <qresource prefix="/">
-        <file>checked.png</file>
-        <file>unchecked.png</file>
-        <file>close.png</file>
-        <file>close_hover.png</file>
-        <file>add.png</file>
-        <file>add_hover.png</file>
-        <file>del.png</file>
-        <file>del_hover.png</file>
-        <file>offswitch.png</file>
-        <file>onswitch.png</file>
-        <file>down_arrow.png</file>
-        <file>tip.png</file>
-    </qresource>
-</RCC>

+ 0 - 0
ACAServerSetInfo.pro → SettingLibrary/ACAServerSetInfo.pro


+ 82 - 0
SettingLibrary/CMakeLists.txt

@@ -0,0 +1,82 @@
+cmake_minimum_required(VERSION 3.10)
+
+set(libName ACAServerSetting)
+
+
+
+
+#包含源文件
+file(GLOB LOCAL_SRC
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.qrc
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.rc
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.ui
+    ${CMAKE_CURRENT_SOURCE_DIR}/DataBase/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Resources/*.qrc
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/AICompare/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/Basic/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/CheckPeriod/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/Database/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/Noise/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/UIStyle/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/DialogBase/*.cpp
+
+    # ${CMAKE_SOURCE_DIR}/External/module/Logs/*.cpp
+    # ${CMAKE_SOURCE_DIR}/External/module/ThreadPool/*.cpp
+    
+)
+
+
+
+# 生成可执行程序
+
+add_library(${libName} SHARED
+    # WIN32
+    # ${GLOBAL_SRC}
+    ${LOCAL_SRC} 
+)
+
+target_compile_definitions(${libName} PRIVATE
+    ACASERVERSETINFO_LIBRARY
+)
+
+# set_target_properties(${libName} PROPERTIES
+#     DEBUG_POSTFIX d
+# )
+
+
+#添加头文件
+target_include_directories(${libName} PRIVATE
+
+    ${CMAKE_CURRENT_SOURCE_DIR}
+
+    ${CMAKE_SOURCE_DIR}/External/common
+    ${CMAKE_SOURCE_DIR}/External/module
+    # ${CMAKE_SOURCE_DIR}/External/module/ThreadPool
+    # ${CMAKE_SOURCE_DIR}/External/module/RingQueue
+
+    ${CMAKE_CURRENT_SOURCE_DIR}/DataBase
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/AICompare
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/Basic
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/CheckPeriod
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/Database
+    ${CMAKE_CURRENT_SOURCE_DIR}/Modules/Noise
+    ${CMAKE_CURRENT_SOURCE_DIR}/UIStyle
+    ${CMAKE_CURRENT_SOURCE_DIR}/DialogBase
+
+    ${spdlog_INCLUDE_DIR}
+)
+
+
+target_link_libraries(${libName} PRIVATE
+    Qt${QT_VERSION_MAJOR}::Widgets
+    Qt${QT_VERSION_MAJOR}::Core
+
+)
+
+target_link_libraries(${libName} PRIVATE
+    ${spdlog_LIBRARY}
+
+)
+

+ 0 - 0
DataBase/entities.cpp → SettingLibrary/DataBase/entities.cpp


+ 0 - 0
DataBase/entities.h → SettingLibrary/DataBase/entities.h


+ 117 - 0
SettingLibrary/DialogBase/DialogBase.cpp

@@ -0,0 +1,117 @@
+#include "DialogBase.h"
+
+#include <QMouseEvent>
+#include <QVBoxLayout>
+#include <QLabel>
+#include <QPushButton>
+#include <QBoxLayout>
+#include <qboxlayout.h>
+#include <qpushbutton.h>
+
+
+DialogBase::DialogBase(QWidget *parent)
+    : QDialog(parent)
+{
+
+}
+DialogBase::~DialogBase()
+{
+
+}
+
+/* 设置标题 */
+void DialogBase::setTitle(const QString &title, QSize size)
+{
+
+}
+
+/* 获取标题 */
+QString DialogBase::getTitle() const
+{
+    return m_labelTitle ? m_labelTitle->text() : QString();
+}
+
+/* 初始化UI */
+void DialogBase::initUI()
+{
+    /*--------------------- 初始化背景容器 -----------------------*/
+    m_widgetBackground = new QWidget(this);
+    m_widgetBackground->setObjectName("widget_background");
+    QVBoxLayout* layout = new QVBoxLayout(this);
+    /* 设置边距,就是阴影的宽度 */
+    layout->setContentsMargins(20, 20, 20, 20);
+    layout->setSpacing(0);
+    this->setLayout(layout);
+    layout->addWidget(m_widgetBackground);
+
+    /* 创建背景容器内部的布局 */
+    m_layoutBackground = new QVBoxLayout(m_widgetBackground);
+    m_layoutBackground->setContentsMargins(0, 0, 0, 0);
+    m_layoutBackground->setSpacing(0);
+    m_widgetBackground->setLayout(m_layoutBackground);
+
+    /*--------------------- 初始顶栏 -----------------------*/
+    /* 初始化顶部标题栏,高度56,下面分割线高度1 */
+    m_widgetTop = new QWidget(this);
+    m_widgetTop->setObjectName("widget_top");
+    m_widgetTop->setFixedHeight(56);
+    m_layoutBackground->addWidget(m_widgetTop);
+    QHBoxLayout* topHBoxLayout = new QHBoxLayout(m_widgetTop);
+    m_widgetTop->setLayout(topHBoxLayout);
+
+    /* 初始化标题栏 */
+    m_labelTitle = new QLabel(m_widgetTop);
+    m_labelTitle->setObjectName("label_title");
+    m_labelTitle->setText("Dialog Title");
+    m_labelTitle->setFixedSize(120, 18);
+    m_labelTitle->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
+    /* 初始化关闭按钮 */
+    m_pBtn_Close = new QPushButton(m_widgetTop);
+    m_pBtn_Close->setObjectName("pBtn_Close");
+    m_pBtn_Close->resize(32, 32);
+    /* 重新布局顶栏 */
+    layoutTop();
+}
+
+/* 设置top栏的位置布局,标题和关闭按钮的高度起始位置不一样,不方便使用布局,所有手动修改坐标
+ * 标题位置32,18,高度18
+ * 关闭按钮右对齐16,y12,大小32x32 */
+void DialogBase::layoutTop()
+{
+    m_labelTitle->move(32, 18);
+    int x = m_widgetTop->width() - m_pBtn_Close->width() - 16;
+    m_pBtn_Close->move(x, 12);
+}
+
+/* 重写鼠标按下事件 */
+void DialogBase::mousePressEvent(QMouseEvent *event)
+{
+    m_lastPos = event->globalPos();
+    event->accept();
+}
+
+/* 重写鼠标移动事件 */
+void DialogBase::mouseMoveEvent(QMouseEvent *event)
+{
+    auto point = m_widgetTop->mapToGlobal(QPoint(0, 0));
+    QRect rect(point, m_widgetTop->size());
+
+    if(!rect.contains(m_lastPos))
+    {
+        event->accept();
+        return;
+    }
+
+    int dx = event->globalX() - m_lastPos.x();
+    int dy = event->globalY() - m_lastPos.y();
+    m_widgetBackground->move(m_widgetBackground->x() + dx, m_widgetBackground->y() + dy);
+    m_lastPos = event->globalPos();
+    event->accept();
+}
+
+/* 重写鼠标释放事件 */
+void DialogBase::mouseReleaseEvent(QMouseEvent *event)
+{
+    event->accept();
+}
+

+ 64 - 0
SettingLibrary/DialogBase/DialogBase.h

@@ -0,0 +1,64 @@
+#ifndef __DIALOGBASE_H__
+#define __DIALOGBASE_H__
+
+#include <QDialog>
+
+class QMouseEvent;
+class QVBoxLayout;
+class QPushButton;
+class QWidget;
+class QLabel;
+class QPoint;
+
+
+/**
+ * @brief 这个基础类主要为了实现弹窗通用的拖动和阴影效果
+ * 
+ */
+class DialogBase : public QDialog
+{
+    Q_OBJECT
+public:
+    explicit DialogBase(QWidget *parent = nullptr);
+    ~DialogBase();
+
+    /* 设置标题 */
+    void setTitle(const QString &title, QSize size = QSize(120, 18));
+
+    /* 获取标题 */
+    QString getTitle() const;
+
+protected:
+    /* 初始化UI */
+    virtual void initUI();
+    /* 设置top栏的位置布局 */
+    void layoutTop();
+
+protected:
+    /* 重写鼠标按下事件 */
+    void mousePressEvent(QMouseEvent *event) override;
+    /* 重写鼠标移动事件 */
+    void mouseMoveEvent(QMouseEvent *event) override;
+    /* 重写鼠标释放事件 */
+    void mouseReleaseEvent(QMouseEvent *event) override;
+
+    /* 重新设置大小 */
+
+protected:
+    QPoint m_lastPos;                           /* 鼠标点击的位置 */
+
+    QWidget* m_widgetBackground = nullptr;      /* 背景容器,这个才是真正容纳所有内容的容器 */
+    QWidget* m_widgetTop = nullptr;             /* 顶部标题栏 */
+    QWidget* m_widgetContent = nullptr;         /* 内容区域 */
+    QWidget* m_widgetBottom = nullptr;          /* 底部按钮区域 */
+
+    QVBoxLayout* m_layoutBackground = nullptr; /* 背景容器的布局 */
+
+    QLabel* m_labelTitle = nullptr;             /* 标题标签 */
+    QPushButton* m_pBtn_Close = nullptr;        /* 关闭按钮 */
+    QPushButton* m_pBtn_OK = nullptr;           /* 确认按钮 */
+    QPushButton* m_pBtn_Cancel = nullptr;       /* 取消按钮 */
+};
+
+
+#endif // __DIALOGBASE_H__

+ 0 - 0
Modules/AICompare/aicomparewidget.cpp → SettingLibrary/Modules/AICompare/aicomparewidget.cpp


+ 0 - 0
Modules/AICompare/aicomparewidget.h → SettingLibrary/Modules/AICompare/aicomparewidget.h


+ 0 - 0
Modules/AICompare/aicomparewidget.ui → SettingLibrary/Modules/AICompare/aicomparewidget.ui


+ 0 - 0
Modules/Basic/basicwidget.cpp → SettingLibrary/Modules/Basic/basicwidget.cpp


+ 0 - 0
Modules/Basic/basicwidget.h → SettingLibrary/Modules/Basic/basicwidget.h


+ 0 - 0
Modules/Basic/basicwidget.ui → SettingLibrary/Modules/Basic/basicwidget.ui


+ 0 - 0
Modules/Basic/compareitemdialog.cpp → SettingLibrary/Modules/Basic/compareitemdialog.cpp


+ 0 - 0
Modules/Basic/compareitemdialog.h → SettingLibrary/Modules/Basic/compareitemdialog.h


+ 0 - 0
Modules/Basic/compareitemdialog.ui → SettingLibrary/Modules/Basic/compareitemdialog.ui


+ 0 - 0
Modules/Basic/compareitemlistdialog.cpp → SettingLibrary/Modules/Basic/compareitemlistdialog.cpp


+ 0 - 0
Modules/Basic/compareitemlistdialog.h → SettingLibrary/Modules/Basic/compareitemlistdialog.h


+ 0 - 0
Modules/Basic/compareitemlistdialog.ui → SettingLibrary/Modules/Basic/compareitemlistdialog.ui


+ 0 - 0
Modules/Basic/compareitmedetaildialog.cpp → SettingLibrary/Modules/Basic/compareitmedetaildialog.cpp


+ 0 - 0
Modules/Basic/compareitmedetaildialog.h → SettingLibrary/Modules/Basic/compareitmedetaildialog.h


+ 0 - 0
Modules/Basic/compareitmedetaildialog.ui → SettingLibrary/Modules/Basic/compareitmedetaildialog.ui


+ 0 - 0
Modules/Basic/singlecompareroadwidget.cpp → SettingLibrary/Modules/Basic/singlecompareroadwidget.cpp


+ 0 - 0
Modules/Basic/singlecompareroadwidget.h → SettingLibrary/Modules/Basic/singlecompareroadwidget.h


+ 0 - 0
Modules/Basic/singlecompareroadwidget.ui → SettingLibrary/Modules/Basic/singlecompareroadwidget.ui


+ 0 - 0
Modules/CheckPeriod/addperioddialog.cpp → SettingLibrary/Modules/CheckPeriod/addperioddialog.cpp


+ 0 - 0
Modules/CheckPeriod/addperioddialog.h → SettingLibrary/Modules/CheckPeriod/addperioddialog.h


+ 0 - 0
Modules/CheckPeriod/addperioddialog.ui → SettingLibrary/Modules/CheckPeriod/addperioddialog.ui


+ 0 - 0
Modules/CheckPeriod/checkperiodwidget.cpp → SettingLibrary/Modules/CheckPeriod/checkperiodwidget.cpp


+ 0 - 0
Modules/CheckPeriod/checkperiodwidget.h → SettingLibrary/Modules/CheckPeriod/checkperiodwidget.h


+ 0 - 0
Modules/CheckPeriod/checkperiodwidget.ui → SettingLibrary/Modules/CheckPeriod/checkperiodwidget.ui


+ 0 - 0
Modules/Database/databasewidget.cpp → SettingLibrary/Modules/Database/databasewidget.cpp


+ 0 - 0
Modules/Database/databasewidget.h → SettingLibrary/Modules/Database/databasewidget.h


+ 0 - 0
Modules/Database/databasewidget.ui → SettingLibrary/Modules/Database/databasewidget.ui


+ 0 - 0
Modules/Noise/noisemonitorparamdialog.cpp → SettingLibrary/Modules/Noise/noisemonitorparamdialog.cpp


+ 0 - 0
Modules/Noise/noisemonitorparamdialog.h → SettingLibrary/Modules/Noise/noisemonitorparamdialog.h


+ 0 - 0
Modules/Noise/noisemonitorparamdialog.ui → SettingLibrary/Modules/Noise/noisemonitorparamdialog.ui


+ 0 - 0
Modules/Noise/noisewidget.cpp → SettingLibrary/Modules/Noise/noisewidget.cpp


+ 0 - 0
Modules/Noise/noisewidget.h → SettingLibrary/Modules/Noise/noisewidget.h


+ 0 - 0
Modules/Noise/noisewidget.ui → SettingLibrary/Modules/Noise/noisewidget.ui


+ 5 - 0
SettingLibrary/Resources/QSS.qrc

@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/">
+        <file>qss/white/setinfowidget.qss</file>
+    </qresource>
+</RCC>

+ 16 - 0
SettingLibrary/Resources/Resources.qrc

@@ -0,0 +1,16 @@
+<RCC>
+    <qresource prefix="/">
+        <file>icon/checked.png</file>
+        <file>icon/unchecked.png</file>
+        <file>icon/close.png</file>
+        <file>icon/close_hover.png</file>
+        <file>icon/add.png</file>
+        <file>icon/add_hover.png</file>
+        <file>icon/del.png</file>
+        <file>icon/del_hover.png</file>
+        <file>icon/offswitch.png</file>
+        <file>icon/onswitch.png</file>
+        <file>icon/down_arrow.png</file>
+        <file>icon/tip.png</file>
+    </qresource>
+</RCC>

+ 0 - 0
Resources/add.png → SettingLibrary/Resources/icon/add.png


+ 0 - 0
Resources/add_hover.png → SettingLibrary/Resources/icon/add_hover.png


+ 0 - 0
Resources/checked.png → SettingLibrary/Resources/icon/checked.png


+ 0 - 0
Resources/close.png → SettingLibrary/Resources/icon/close.png


+ 0 - 0
Resources/close_hover.png → SettingLibrary/Resources/icon/close_hover.png


+ 0 - 0
Resources/del.png → SettingLibrary/Resources/icon/del.png


+ 0 - 0
Resources/del_hover.png → SettingLibrary/Resources/icon/del_hover.png


+ 0 - 0
Resources/down_arrow.png → SettingLibrary/Resources/icon/down_arrow.png


+ 0 - 0
Resources/offswitch.png → SettingLibrary/Resources/icon/offswitch.png


+ 0 - 0
Resources/onswitch.png → SettingLibrary/Resources/icon/onswitch.png


+ 0 - 0
Resources/tip.png → SettingLibrary/Resources/icon/tip.png


+ 0 - 0
Resources/unchecked.png → SettingLibrary/Resources/icon/unchecked.png


+ 39 - 0
SettingLibrary/Resources/qss/white/setinfowidget.qss

@@ -0,0 +1,39 @@
+QTabWidget#tabWidget
+{
+	background: #FFFFFF;
+}
+
+QTabWidget::tab-bar
+{
+	background: #FFFFFF;
+}
+QTabBar::tab 
+{
+	border: none;
+	width: 70px;
+	height:48px;
+	background: #FFFFFF;
+	font-weight: 400;
+	font-size: 14px;
+	color: #3A3F63;
+}
+QTabBar::tab:selected, QTabBar::tab:hover
+{
+	font-weight: 400;
+	font-size: 14px;
+	color: #4458FE;
+	border-bottom: 2px solid #4458FE;
+}
+
+QTabWidget::pane
+{
+	border-top: 1px solid #E9E9E9;
+	background-color: #FFFFFF;
+}
+QTabBar QToolButton::right-arrow
+{
+
+}	
+QTabBar QToolButton::left-arrow
+{
+}	

+ 133 - 0
SettingLibrary/UIStyle/UIStyleManager.cpp

@@ -0,0 +1,133 @@
+#include "UIStyleManager.h"
+
+#include <QFile>
+#include <QEventLoop>
+#include <qchar.h>
+#include <qevent.h>
+#include "spdlog/spdlog.h"
+
+UIStyleManager::UIStyleManager()
+{
+    m_qssPath = ":/qss";
+}
+
+
+/* 获取样式表路径 */
+QString UIStyleManager::getQSSPath()
+{
+    if(m_UIStyle == EUIStyle::UI_Light)
+    {
+        return m_qssPath + m_lightQSS;
+    }
+    else if(m_UIStyle == EUIStyle::UI_Dark)
+    {
+        return m_qssPath + m_darkQSS;
+    }
+    return QString();
+}
+
+/* 换肤,修改样式表 */
+void UIStyleManager::setUIStyle(EUIStyle style)
+{
+    m_UIStyle = style;
+   
+    /* 打开所有的QSS文件 */
+    readQSSFile();
+
+    /* 修改已经注册到这里的widget的qss */
+    changeListWidget(style);
+
+    /* 发送普通换肤信号信号 */
+    emit signal_qssChanged(style);
+
+    /* 处理事件,让UI接收到换肤信号 */
+    QEventLoop loop;
+    loop.processEvents();
+
+    SPDLOG_INFO("换肤成功,皮肤样式:{}", static_cast<int>(m_UIStyle));
+}
+
+/* 注册需要修改样式表的组件 */
+void UIStyleManager::registerWidget(QWidget* widget)
+{
+    if(widget == nullptr)
+    {
+        SPDLOG_ERROR("注册组件失败,组件指针为空");
+        return;
+    }
+    if(!m_listWidgets.contains(widget))
+    {
+        m_listWidgets.append(widget);
+        /* 设置样式表 */
+        QString qssPath = getQSSPath() + "/" + widget->objectName().toLower() + ".qss";
+        QFile file(qssPath);
+        if (!file.open(QFile::ReadOnly | QFile::Text))
+        {
+            SPDLOG_ERROR("打开组件样式表文件失败,路径 {}", qssPath.toStdString());
+            SPDLOG_ERROR("错误信息:{}", file.errorString().toStdString());
+            return;
+        }
+        QString styleSheet = file.readAll();
+        file.close();
+        widget->setStyleSheet(styleSheet);
+        // SPDLOG_INFO("注册组件成功,组件名称:{}", widget->objectName().toStdString());
+    } else
+    {
+        SPDLOG_WARN("组件已经注册过了,组件名称:{}", widget->objectName().toStdString());
+    }
+}
+
+/* 注销需要修改样式表的组件 */
+void UIStyleManager::unregisterWidget(QWidget* widget)
+{
+    if(widget == nullptr)
+    {
+        SPDLOG_ERROR("注销组件失败,组件指针为空");
+        return;
+    }
+    if(m_listWidgets.contains(widget))
+    {
+        m_listWidgets.removeAll(widget);
+        // SPDLOG_INFO("注销组件成功,组件名称:{}", widget->objectName().toStdString());
+    } else
+    {
+        SPDLOG_WARN("组件没有注册过,无法注销,组件名称:{}", widget->objectName().toStdString());
+    }
+}
+
+/**
+ * @brief 这里读取需要重复打开的QSS文件
+ * 
+ */
+void UIStyleManager::readQSSFile()
+{
+    
+}
+
+/* 修改已经注册到这里的widget的qss */
+void UIStyleManager::changeListWidget(EUIStyle style)
+{
+    for(QWidget* widget : m_listWidgets)
+    {
+        if(widget == nullptr)
+        {
+            SPDLOG_ERROR("修改组件样式表失败,组件指针为空");
+            continue;
+        }
+        
+        QString qssPath = getQSSPath() + "/" + widget->objectName().toLower() + ".qss";
+        QFile file(qssPath);
+        if (!file.open(QFile::ReadOnly | QFile::Text))
+        {
+            SPDLOG_ERROR("打开组件样式表文件失败,路径:{}", qssPath.toStdString());
+            SPDLOG_ERROR("错误信息:{}", file.errorString().toStdString());
+            continue;
+        }
+        QString styleSheet = file.readAll();
+        file.close();
+        widget->setStyleSheet(styleSheet);
+    }
+    
+}
+
+

+ 85 - 0
SettingLibrary/UIStyle/UIStyleManager.h

@@ -0,0 +1,85 @@
+#ifndef UISTYLEMANAGER_H
+#define UISTYLEMANAGER_H
+
+
+#include <QObject>
+#include <QWidget>
+#include <QList>
+
+
+
+/**
+ * @brief UI样式
+ * 
+ */
+enum class EUIStyle
+{
+    UI_Light = 0,               /* 亮色 */
+    UI_Dark = 1                 /* 暗色 */
+};
+
+/* 将枚举类型注册进Qt系统 */
+Q_DECLARE_METATYPE(EUIStyle)
+
+
+
+#define UIStyle UIStyleManager::getInstance()
+/**
+ * @brief 全局皮肤管理器,大部分的UI从这里加载qss文件
+ *          1、普通的Widget直接在这里打开qss文件,qss文件使用widget的objectbname来获取,qss文件要全小写
+ *          2、普通的widget通过注册过来指针,注册后会自动修改样式表,widget在析构的时候要主动remove掉
+ *          3、如果是高度封装的组件,直接使用信号槽机制来修改样式表
+ * 
+ */
+class UIStyleManager : public QObject
+{
+    Q_OBJECT
+
+    UIStyleManager();
+    UIStyleManager(const UIStyleManager& config) = delete;
+    UIStyleManager& operator=(const UIStyleManager& config) = delete;
+public:
+    ~UIStyleManager() {}
+
+    static UIStyleManager& getInstance()
+    {
+        static UIStyleManager config;
+        return config;
+    }
+
+    /* 获取样式表路径 */
+    QString getQSSPath();
+    /* 换肤,修改样式表 */
+    void setUIStyle(EUIStyle style);
+    /* 获取当前UI风格 */
+    EUIStyle getUIStyle() const { return m_UIStyle; }
+
+    /* 注册需要修改样式表的组件 */
+    void registerWidget(QWidget* widget);
+    /* 注销需要修改样式表的组件 */
+    void unregisterWidget(QWidget* widget);
+    
+
+signals:
+    /* 样式表改变了,这个信号给那些高度封装的组件使用的 */
+    void signal_qssChanged(EUIStyle style);
+
+private:
+    /* 读取qss样式文件 */
+    void readQSSFile();
+    /* 修改已经注册到这里的widget的qss */
+    void changeListWidget(EUIStyle style);
+
+private:
+    EUIStyle m_UIStyle;                             /* 当前UI样式 */
+    QString m_qssPath;                              /* 样式表路径 */
+    const QString m_lightQSS = "/white";            /* 亮色样式表路径 */
+    const QString m_darkQSS = "/dark";              /* 暗色样式表路径 */
+
+    QList<QWidget*> m_listWidgets;                  /* 需要修改样式表的组件列表 */
+    
+};
+
+
+
+#endif /* UISTYLEMANAGER_H */

+ 0 - 0
acaserversetinfo.cpp → SettingLibrary/acaserversetinfo.cpp


+ 0 - 0
acaserversetinfo.h → SettingLibrary/acaserversetinfo.h


+ 0 - 0
setinfomanager.cpp → SettingLibrary/setinfomanager.cpp


+ 0 - 0
setinfomanager.h → SettingLibrary/setinfomanager.h


+ 11 - 0
setinfowidget.cpp → SettingLibrary/setinfowidget.cpp

@@ -1,14 +1,25 @@
 #include "setinfowidget.h"
 #include "ui_setinfowidget.h"
 
+
+#include "UIStyleManager.h"
+
+
 SetInfoWidget::SetInfoWidget(QWidget *parent) :
     QWidget(parent),
     ui(new Ui::SetInfoWidget)
 {
     ui->setupUi(this);
+
+    /* 设置样式表 */
+    UIStyle.registerWidget(this);
 }
 
 SetInfoWidget::~SetInfoWidget()
 {
+    /* 注销样式表 */
+    UIStyle.unregisterWidget(this);
     delete ui;
 }
+
+

+ 4 - 0
setinfowidget.h → SettingLibrary/setinfowidget.h

@@ -3,6 +3,7 @@
 
 #include <QWidget>
 
+
 namespace Ui {
 class SetInfoWidget;
 }
@@ -15,6 +16,9 @@ public:
     explicit SetInfoWidget(QWidget *parent = nullptr);
     ~SetInfoWidget();
 
+private slots:
+    
+
 private:
     Ui::SetInfoWidget *ui;
 };

+ 1 - 39
setinfowidget.ui → SettingLibrary/setinfowidget.ui

@@ -14,45 +14,7 @@
    <string>Form</string>
   </property>
   <property name="styleSheet">
-   <string notr="true">QTabWidget#tabWidget
-{
-	background: #FFFFFF;
-}
-
-QTabWidget::tab-bar
-{
-	background: #FFFFFF;
-}
-QTabBar::tab 
-{
-	border: none;
-	width: 70px;
-	height:48px;
-	background: #FFFFFF;
-	font-weight: 400;
-	font-size: 14px;
-	color: #3A3F63;
-}
-QTabBar::tab:selected, QTabBar::tab:hover
-{
-	font-weight: 400;
-	font-size: 14px;
-	color: #4458FE;
-	border-bottom: 2px solid #4458FE;
-}
-
-QTabWidget::pane
-{
-	border-top: 1px solid #E9E9E9;
-	background-color: #FFFFFF;
-}
-QTabBar QToolButton::right-arrow
-{
-
-}	
-QTabBar QToolButton::left-arrow
-{
-}	</string>
+   <string notr="true"/>
   </property>
   <layout class="QGridLayout" name="gridLayout">
    <property name="leftMargin">

+ 59 - 0
show1/CMakeLists.txt

@@ -0,0 +1,59 @@
+cmake_minimum_required(VERSION 3.10)
+
+set(this_exe ACASetting)
+
+
+
+#包含源文件
+file(GLOB LOCAL_SRC
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.qrc
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.rc
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/*.ui
+
+    ${CMAKE_CURRENT_SOURCE_DIR}/SettingLibAPI/*.cpp
+    
+)
+
+
+# 生成可执行程序
+
+add_executable(${this_exe}
+    # WIN32
+    ${GLOBAL_SRC}
+    ${LOCAL_SRC} 
+)
+
+# set_target_properties(${this_exe} PROPERTIES
+    
+# )
+
+
+#添加头文件
+target_include_directories(${this_exe} PRIVATE
+
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/SettingLibAPI
+
+    ${CMAKE_SOURCE_DIR}/External/common
+    ${CMAKE_SOURCE_DIR}/External/module
+    
+    ${spdlog_INCLUDE_DIR}
+)
+
+
+target_link_libraries(${this_exe} PRIVATE
+    Qt${QT_VERSION_MAJOR}::Widgets
+    Qt${QT_VERSION_MAJOR}::Core
+    Qt${QT_VERSION_MAJOR}::Network
+    # Qt${QT_VERSION_MAJOR}::Gui
+
+)
+
+target_link_libraries(${this_exe} PRIVATE
+    ${spdlog_LIBRARY}
+
+)
+
+
+

+ 128 - 0
show1/SettingLibAPI/settingAPI.cpp

@@ -0,0 +1,128 @@
+#include "settingAPI.h"
+
+#include <QLibrary>
+#include <QCoreApplication>
+#include <QDebug>
+
+using funcInit = int (*)(const stInitData* pData);
+using funcCreateWindow = int (*)(int nSkinType, QWidget* parent);
+using funcShowWindow = int (*)(int nSkinType, int nServiceID, bool bShowWindow);
+using funcGetChangedData = int (*)(QString& data);
+using funcSave = int (*)(const int);
+using funcRelease = int (*)();
+
+
+funcInit g_pFuncInit = nullptr;
+funcCreateWindow g_pFuncCreateWindow = nullptr;
+funcShowWindow g_pFuncShowWindow = nullptr;
+funcGetChangedData g_pFuncGetChangedData = nullptr;
+funcSave g_pFuncSaveData = nullptr;
+funcRelease g_pFuncRelease = nullptr;
+
+bool g_isLoaded = false;
+
+/**
+ * @brief 加载设置动态库
+ * 
+ * @return true 
+ * @return false 
+ */
+bool loadSettingLibrary()
+{
+    if(g_isLoaded)
+    {
+        return true; // 已经加载过
+    }
+    QString strLibPath = QCoreApplication::applicationDirPath() + "/libACAServerSetting.dll";
+    QLibrary lib(strLibPath);
+    if(!lib.load())
+    {
+        qWarning() << "Failed to load library:" << strLibPath << lib.errorString();
+        return false;
+    }
+
+    g_pFuncInit = reinterpret_cast<funcInit>(lib.resolve("DoInit"));
+    g_pFuncCreateWindow = reinterpret_cast<funcCreateWindow>(lib.resolve("DoCreateWindow"));
+    g_pFuncShowWindow = reinterpret_cast<funcShowWindow>(lib.resolve("DoShowWindow"));
+    g_pFuncGetChangedData = reinterpret_cast<funcGetChangedData>(lib.resolve("DoGetChangedData"));
+    g_pFuncSaveData = reinterpret_cast<funcSave>(lib.resolve("DoSave"));
+    g_pFuncRelease = reinterpret_cast<funcRelease>(lib.resolve("DoRelease"));
+    if(!g_pFuncInit || !g_pFuncCreateWindow || !g_pFuncShowWindow || !g_pFuncGetChangedData || !g_pFuncSaveData || !g_pFuncRelease)
+    {
+        qWarning() << "Failed to resolve functions in library:" << strLibPath;
+        return false;
+    }
+
+    g_isLoaded = true;
+    qDebug() << "Library loaded successfully:" << strLibPath;
+    return true;
+}
+
+
+int DoInit(const stInitData* pData)
+{
+    if(g_pFuncInit == nullptr)
+    {
+        qDebug() << "Function DoInit is not resolved.";
+        return -1; // 函数未解析
+    }
+
+    return g_pFuncInit(pData);
+}
+
+int DoCreateWindow(int nSkinType, QWidget* parent)
+{
+    if(g_pFuncCreateWindow == nullptr)
+    {
+        qDebug() << "Function DoCreateWindow is not resolved.";
+        return -1; // 函数未解析
+    }
+
+    return g_pFuncCreateWindow(nSkinType, parent);
+}
+
+int DoShowWindow(int nSkinType, int nServiceID, bool bShowWindow)
+{
+    if(g_pFuncShowWindow == nullptr)
+    {
+        qDebug() << "Function DoShowWindow is not resolved.";
+        return -1; // 函数未解析
+    }
+
+    return g_pFuncShowWindow(nSkinType, nServiceID, bShowWindow);
+}
+
+int DoGetChangedData(QString& strData)
+{
+    if(g_pFuncGetChangedData == nullptr)
+    {
+        qDebug() << "Function DoGetChangedData is not resolved.";
+        return -1; // 函数未解析
+    }
+
+    return g_pFuncGetChangedData(strData);
+}
+
+int DoSave(const int nServiceID)
+{
+    if(g_pFuncSaveData == nullptr)
+    {
+        qDebug() << "Function DoSaveData is not resolved.";
+        return -1; // 函数未解析
+    }
+
+    return g_pFuncSaveData(nServiceID);
+}
+
+int DoRelease()
+{
+    if(g_pFuncRelease == nullptr)
+    {
+        qDebug() << "Function DoRelease is not resolved.";
+        return -1; // 函数未解析
+    }
+
+    return g_pFuncRelease();
+}
+
+

+ 124 - 0
show1/SettingLibAPI/settingAPI.h

@@ -0,0 +1,124 @@
+#ifndef SETTINGAPI_H
+#define SETTINGAPI_H
+
+#include <QString>
+#include <QWidget>
+
+#ifdef ACASERVERSETINFO_LIBRARY
+#define DLLEXPORT_API Q_DECL_EXPORT
+#else
+#define DLLEXPORT_API
+#endif
+
+
+struct stInitData
+{
+    QString strMqttIP;      // mqtt访问路径
+    int nMqttPort;          // mqtt访问端口
+    QString strWebAddr;     // 数据库访问接口
+    QString strDBID;        // 数据库id
+};
+
+
+/**
+ * @brief 加载设置动态库
+ * 
+ * @return true 
+ * @return false 
+ */
+bool loadSettingLibrary();
+
+//------------------------------------------------------------------------
+//函    数: DoInit()
+//
+//说    明:初始化dll
+//
+//参    数:
+//       pData: 初始化数据
+//返 回 值:0:成功; 其他:失败(详见返回码定义)
+//------------------------------------------------------------------------
+extern "C"
+{
+   int DLLEXPORT_API DoInit(const stInitData* pData);
+}
+
+//------------------------------------------------------------------------
+//函    数: DoCreateWindow(int skintype, QWidget* parent)
+//
+//说    明: 创建窗口
+//
+//参    数: skintype:皮肤类型 0 白色风格  1 黑色风格
+//             parent 父窗口指针(父窗口隐藏子窗口也会隐藏,这里是必填)
+//
+//返 回 值:0:成功; 其他:失败(详见返回码定义)
+//------------------------------------------------------------------------
+extern "C"
+{
+   int DLLEXPORT_API DoCreateWindow(int nSkinType, QWidget* parent);
+}
+
+//------------------------------------------------------------------------
+//函    数: DoShowWindow(int skintype, int serviceid, bool showWindow)
+//
+//说    明: 设置窗口显示状态、加载配置信息
+//
+//参    数: skintype 皮肤类型
+// serviceid: 服务id唯一标识,如果小于0界面显示默认值,大于0获取对应的配置数据
+// showWindow: true 显示 false 隐藏
+//
+//返 回 值:0:成功; 其他:失败(详见返回码定义)
+//------------------------------------------------------------------------
+extern "C"
+{
+   int DLLEXPORT_API DoShowWindow(int nSkinType, int nServiceID, bool bShowWindow);
+}
+
+//------------------------------------------------------------------------
+//函    数: DoGetChangedData
+//
+//说    明: 获取数据修改信息
+//
+//参    数: data 数据变化信息,没变化返回"", 用来保存日志
+//
+//返 回 值:0:成功; 其他:失败(详见返回码定义)
+
+//------------------------------------------------------------------------
+extern "C"
+{
+   int DLLEXPORT_API DoGetChangedData(QString& strData);
+}
+
+//------------------------------------------------------------------------
+//函    数: DoSave(int serviceid)
+//
+//说    明: 保存数据配置信息
+//
+//参    数: serviceid 服务id唯一标识
+//
+//返 回 值:0:成功; 其他:失败(详见返回码定义)
+
+//------------------------------------------------------------------------
+extern "C"
+{
+   int DLLEXPORT_API DoSave(int nServiceID);
+}
+
+//------------------------------------------------------------------------
+//函    数: DoRelease()
+//
+//说    明: 释放资源
+//
+//参    数: void
+//
+//返 回 值:0:成功; 其他:失败(详见返回码定义)
+//------------------------------------------------------------------------
+extern "C"
+{
+   int DLLEXPORT_API DoRelease();
+}
+
+
+
+
+
+#endif // SETTINGAPI_H

+ 60 - 0
show1/main.cpp

@@ -0,0 +1,60 @@
+#include "widget.h"
+
+#include <QApplication>
+#include <QFontDatabase>
+#include <qapplication.h>
+#include <qchar.h>
+
+
+#include "spdlog/spdlog.h"
+
+void addFont();
+
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+
+    /* 从文件加载字体 */
+    addFont();
+
+
+    SPDLOG_INFO("********** ACASetting **********");
+
+
+    Widget w;
+    w.show();
+
+
+    return a.exec();
+}
+
+
+/* 加载字体 */
+void addFont()
+{
+    QString fontPath = QApplication::applicationDirPath() + "/font/SiYuanBlack_ttf";
+    /* 加载字体 */
+    QFontDatabase::addApplicationFont(fontPath + "/SiYuanBlack_Bold.ttf)");
+    QFontDatabase::addApplicationFont(fontPath + "/SiYuanBlack_M.ttf)");
+    QFontDatabase::addApplicationFont(fontPath + "/SiYuanBlack_R.ttf)");
+    /***************************************************
+     * 字体使用方式
+     * id1 ("思源黑体-粗")
+     * id2 ("思源黑体M")
+     * id3 ("思源黑体R")
+    ****************************************************/
+    //    SPDLOG_LOGGER_DEBUG(m_logger,"id1 = {}",QFontDatabase::applicationFontFamilies(id1));
+    //    qDebug() << "id1" << QFontDatabase::applicationFontFamilies(id1);
+    //    qDebug() << "id2" << QFontDatabase::applicationFontFamilies(id2);
+    //    qDebug() << "id3" << QFontDatabase::applicationFontFamilies(id3);
+    QFont font_main;
+   font_main.setFamily("思源黑体R");
+    font_main.setPixelSize(14);
+    QApplication::setFont(font_main);
+}
+
+
+
+
+

+ 41 - 0
show1/widget.cpp

@@ -0,0 +1,41 @@
+#include "widget.h"
+#include "ui_widget.h"
+
+#include <QLayout>
+#include <QVBoxLayout>
+
+#include "settingAPI.h"
+#include "spdlog/spdlog.h"
+
+Widget::Widget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::Widget)
+{
+    ui->setupUi(this);
+
+
+    QVBoxLayout *layout = new QVBoxLayout(this);
+    layout->setContentsMargins(16, 16, 16, 16);
+    layout->setSpacing(8);
+    this->setLayout(layout);
+
+    // 加载设置动态库
+    if(!loadSettingLibrary())
+    {
+        SPDLOG_ERROR("Failed to load setting library.");
+        return;
+    }
+    // 初始化数据
+    stInitData initData;
+    DoInit(&initData);
+    // 创建窗口
+    int skinType = 0; // 0: 白色风格, 1: 黑色风格
+    int result = DoCreateWindow(skinType, this);
+    DoShowWindow(1, 1, true);
+
+}
+
+Widget::~Widget()
+{
+    delete ui;
+}

+ 22 - 0
show1/widget.h

@@ -0,0 +1,22 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+namespace Ui {
+class Widget;
+}
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit Widget(QWidget *parent = nullptr);
+    ~Widget();
+
+private:
+    Ui::Widget *ui;
+};
+
+#endif // WIDGET_H

+ 21 - 0
show1/widget.ui

@@ -0,0 +1,21 @@
+<ui version="4.0">
+ <author/>
+ <comment/>
+ <exportmacro/>
+ <class>Widget</class>
+ <widget name="Widget" class="QWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+ </widget>
+ <pixmapfunction/>
+ <connections/>
+</ui>