├── .gitignore
├── LICENSE
├── README.md
├── allplugins
├── README.md
├── images
│ ├── images.pro
│ ├── images.qrc
│ ├── include
│ │ ├── images.h
│ │ ├── images_global.h
│ │ ├── stdafx.h
│ │ └── widgets
│ │ │ ├── account_widget.h
│ │ │ └── sidebar_widget.h
│ ├── resources
│ │ └── test.png
│ └── src
│ │ ├── images.cpp
│ │ └── widgets
│ │ ├── account_widget.cpp
│ │ └── sidebar_widget.cpp
├── plugins.json
├── plugins.pro
├── plugins.pro.user.jvcbHn
└── plugins_base
│ ├── README.md
│ └── pluginsmanager_base.h
├── depends
├── Qt5Network.dll
├── msvcp140.dll
├── ucrtbase.dll
└── vcruntime140.dll
├── docs
└── DT教程01.md
├── global
├── README.md
└── define.h
├── images
├── README.md
├── open.jpg
├── plugins.jpg
├── qt.png
├── struct.png
├── success.jpg
└── success.png
├── main
├── .gitattributes
├── .gitignore
├── README.md
├── common
│ ├── .gitignore
│ ├── common.pro
│ ├── include
│ │ ├── common.h
│ │ ├── dterrorcode.h
│ │ ├── dtfile.h
│ │ ├── dtimages.h
│ │ ├── dtjson.h
│ │ ├── dtlog.h
│ │ ├── dtregistry.h
│ │ ├── dttime.h
│ │ ├── stdafx.h
│ │ └── stdafx.h.cpp
│ └── src
│ │ ├── common.cpp
│ │ ├── dtfile.cpp
│ │ ├── dtimages.cpp
│ │ ├── dtjson.cpp
│ │ ├── dtlog.cpp
│ │ ├── dtregistry.cpp
│ │ └── dttime.cpp
├── dtclient
│ ├── .gitignore
│ ├── dtclient.pro
│ ├── dtclient.qrc
│ ├── icon.ico
│ ├── include
│ │ ├── component
│ │ │ ├── playslider.h
│ │ │ └── playwidget.h
│ │ ├── globaldefine.h
│ │ ├── mainwindow.h
│ │ ├── pluginsmanager.h
│ │ ├── stdafx.h
│ │ ├── stdafx.h.cpp
│ │ ├── util.h
│ │ └── win
│ │ │ └── dumper.h
│ ├── resources
│ │ ├── background.jpg
│ │ ├── css
│ │ │ └── common.css
│ │ ├── icon.ico
│ │ ├── icon.png
│ │ ├── images
│ │ │ ├── Others
│ │ │ │ ├── First class unit_bg_hover.png
│ │ │ │ ├── First class unit_bg_nor.png
│ │ │ │ ├── First class_hover弹窗_bg.png
│ │ │ │ ├── Instruction information_bg.png
│ │ │ │ ├── Three level unit_bg_hover.png
│ │ │ │ ├── Three level unit_bg_nor.png
│ │ │ │ ├── Three level unit_hover弹窗_bg.png
│ │ │ │ ├── Two level unit_bg_hover.png
│ │ │ │ ├── Two level unit_bg_nor.png
│ │ │ │ ├── Two level unit_hover弹窗_bg.png
│ │ │ │ ├── Uncommunicated_uncommunicated.png
│ │ │ │ ├── arrow_before.png
│ │ │ │ ├── arrow_rear.png
│ │ │ │ ├── change parameters_bg.png
│ │ │ │ ├── default unit_bg_hover.png
│ │ │ │ ├── default unit_bg_nor.png
│ │ │ │ ├── information_type four.png
│ │ │ │ ├── information_type one.png
│ │ │ │ ├── information_type three.png
│ │ │ │ ├── information_type two.png
│ │ │ │ ├── type eight.png
│ │ │ │ ├── type five.png
│ │ │ │ ├── type four.png
│ │ │ │ ├── type one.png
│ │ │ │ ├── type seven.png
│ │ │ │ ├── type six.png
│ │ │ │ ├── type three.png
│ │ │ │ └── type two.png
│ │ │ ├── QCheckBox
│ │ │ │ ├── checked_disabled.png
│ │ │ │ ├── checked_hover.png
│ │ │ │ ├── checked_nor.png
│ │ │ │ ├── checked_pressed.png
│ │ │ │ ├── indeteminate_disabled.png
│ │ │ │ ├── indeteminate_hover.png
│ │ │ │ ├── indeteminate_nor.png
│ │ │ │ ├── indeteminate_pressed.png
│ │ │ │ ├── unchecked_disabled.png
│ │ │ │ ├── unchecked_hover.png
│ │ │ │ ├── unchecked_nor.png
│ │ │ │ └── unchecked_pressed.png
│ │ │ ├── QComboBox
│ │ │ │ ├── disable.png
│ │ │ │ ├── editable_hover.png
│ │ │ │ ├── editable_nor.png
│ │ │ │ ├── editable_pressed.png
│ │ │ │ ├── list_bg.png
│ │ │ │ ├── list_hover.png
│ │ │ │ ├── list_pressed.png
│ │ │ │ ├── list_selected.png
│ │ │ │ ├── upArrow_hover.png
│ │ │ │ ├── upArrow_nor.png
│ │ │ │ ├── upArrow_pressed.png
│ │ │ │ └── upArrow_selected.png
│ │ │ ├── QDialog
│ │ │ │ ├── bg.png
│ │ │ │ ├── cancel_hover.png
│ │ │ │ ├── cancel_nor.png
│ │ │ │ ├── cancel_pressed.png
│ │ │ │ ├── determine_hover.png
│ │ │ │ ├── determine_nor.png
│ │ │ │ └── determine_pressed.png
│ │ │ ├── QFrame
│ │ │ │ ├── hline.png
│ │ │ │ └── vline.png
│ │ │ ├── QGroupBox
│ │ │ │ ├── window_left_central.png
│ │ │ │ ├── window_left_header.png
│ │ │ │ ├── window_left_open.png
│ │ │ │ └── window_right.png
│ │ │ ├── QHeaderView
│ │ │ │ ├── h_hover.png
│ │ │ │ ├── h_nor.png
│ │ │ │ ├── h_pressed.png
│ │ │ │ ├── h_secelecd.png
│ │ │ │ ├── v_hover.png
│ │ │ │ ├── v_nor.png
│ │ │ │ ├── v_pressed.png
│ │ │ │ └── v_selected.png
│ │ │ ├── QLineEdit
│ │ │ │ ├── hover.png
│ │ │ │ ├── nor.png
│ │ │ │ └── pressed.png
│ │ │ ├── QListView
│ │ │ │ ├── add_hover.png
│ │ │ │ ├── add_nor.png
│ │ │ │ ├── add_pressed.png
│ │ │ │ ├── header.png
│ │ │ │ └── list_checked.png
│ │ │ ├── QMainWindow
│ │ │ │ ├── button .png
│ │ │ │ └── title.png
│ │ │ ├── QMenu
│ │ │ │ ├── bg.png
│ │ │ │ ├── hover.png
│ │ │ │ └── pressed.png
│ │ │ ├── QMenuBar
│ │ │ │ ├── Instruction access_hover.png
│ │ │ │ ├── Instruction access_nor.png
│ │ │ │ ├── arrow_hover.png
│ │ │ │ ├── arrow_nor.png
│ │ │ │ ├── arrow_pressed.png
│ │ │ │ ├── bg.png
│ │ │ │ ├── collaborative group_hover.png
│ │ │ │ ├── collaborative group_nor.png
│ │ │ │ ├── command link_hover.png
│ │ │ │ ├── command link_nor.png
│ │ │ │ ├── down_hover.png
│ │ │ │ ├── down_nor.png
│ │ │ │ ├── down_pressed.png
│ │ │ │ ├── map tools_hover.png
│ │ │ │ ├── map tools_nor.png
│ │ │ │ ├── menubar_hover.png
│ │ │ │ ├── menubar_nor.png
│ │ │ │ ├── menubar_pressed.png
│ │ │ │ ├── system settings_hover.png
│ │ │ │ ├── system settings_nor.png
│ │ │ │ ├── up_hover.png
│ │ │ │ ├── up_nor.png
│ │ │ │ └── up_pressed.png
│ │ │ ├── QProgressBar
│ │ │ │ ├── bg.png
│ │ │ │ └── progress_bar.png
│ │ │ ├── QPushButton
│ │ │ │ ├── 2D_disabled.png
│ │ │ │ ├── 2D_hover.png
│ │ │ │ ├── 2D_nor.png
│ │ │ │ ├── 2D_pressed.png
│ │ │ │ ├── 2_3D_disabled.png
│ │ │ │ ├── 2_3D_hover.png
│ │ │ │ ├── 2_3D_nor.png
│ │ │ │ ├── 2_3D_pressed.png
│ │ │ │ ├── 3D_disabled.png
│ │ │ │ ├── 3D_hover.png
│ │ │ │ ├── 3D_nor.png
│ │ │ │ ├── 3D_pressed.png
│ │ │ │ ├── arrow_disabled.png
│ │ │ │ ├── arrow_hover.png
│ │ │ │ ├── arrow_nor.png
│ │ │ │ ├── arrow_pressed.png
│ │ │ │ ├── close_hover .png
│ │ │ │ ├── close_hover.png
│ │ │ │ ├── close_nor .png
│ │ │ │ ├── close_nor.png
│ │ │ │ ├── close_pressed .png
│ │ │ │ ├── close_pressed.png
│ │ │ │ ├── determine_hover.png
│ │ │ │ ├── determine_nor.png
│ │ │ │ ├── determine_pressed.png
│ │ │ │ ├── eliminate_hover.png
│ │ │ │ ├── eliminate_nor.png
│ │ │ │ ├── eliminate_pressed.png
│ │ │ │ ├── legend_bg_hover.png
│ │ │ │ ├── legend_bg_nor.png
│ │ │ │ ├── legend_pressed.png
│ │ │ │ ├── menu expansion_botton.png
│ │ │ │ ├── menu expansion_hover_bg.png
│ │ │ │ ├── menu expansion_pressed_bg.png
│ │ │ │ ├── menu_bottom_hover.png
│ │ │ │ ├── menu_bottom_nor.png
│ │ │ │ ├── menu_bottom_pressed.png
│ │ │ │ ├── modify_nor .png
│ │ │ │ ├── modify_pressed.png
│ │ │ │ ├── reduction_disabled.png
│ │ │ │ ├── reduction_hover.png
│ │ │ │ ├── reduction_nor.png
│ │ │ │ ├── reduction_pressed.png
│ │ │ │ ├── scale_hover.png
│ │ │ │ ├── scale_nor.png
│ │ │ │ ├── scale_pressed.png
│ │ │ │ ├── window_close_hover.png
│ │ │ │ ├── window_close_nor.png
│ │ │ │ └── window_close_pressed.png
│ │ │ ├── QRadioButton
│ │ │ │ ├── checked_disabled.png
│ │ │ │ ├── checked_hover.png
│ │ │ │ ├── checked_normal.png
│ │ │ │ ├── checked_pressed.png
│ │ │ │ ├── unchecked_disabled.png
│ │ │ │ ├── unchecked_hover.png
│ │ │ │ ├── unchecked_normal.png
│ │ │ │ └── unchecked_pressed.png
│ │ │ ├── QScrollBar
│ │ │ │ ├── downarrow_hover.png
│ │ │ │ ├── downarrow_nor.png
│ │ │ │ ├── downarrow_pressed.png
│ │ │ │ ├── groove_nor.png
│ │ │ │ ├── hGroove_nor.png
│ │ │ │ ├── hHandle_hover.png
│ │ │ │ ├── hHandle_nor.png
│ │ │ │ ├── hHandle_pressed.png
│ │ │ │ ├── handle_hover.png
│ │ │ │ ├── handle_nor.png
│ │ │ │ ├── handle_pressed.png
│ │ │ │ ├── leftarrow_hover.png
│ │ │ │ ├── leftarrow_nor.png
│ │ │ │ ├── leftarrow_pressed.png
│ │ │ │ ├── rightarrow_hover.png
│ │ │ │ ├── rightarrow_nor.png
│ │ │ │ ├── rightarrow_pressed.png
│ │ │ │ ├── uparrow_hover.png
│ │ │ │ ├── uparrow_nor.png
│ │ │ │ └── uparrow_pressed.png
│ │ │ ├── QSizeGrip
│ │ │ │ ├── SizeGrip_hover.png
│ │ │ │ ├── SizeGrip_pressed.png
│ │ │ │ └── nor.png
│ │ │ ├── QSlider
│ │ │ │ ├── h_slider_disabled.png
│ │ │ │ ├── h_slider_hover.png
│ │ │ │ ├── h_slider_nor.png
│ │ │ │ ├── h_slider_pressed.png
│ │ │ │ ├── vslider_disabled.png
│ │ │ │ ├── vslider_hover.png
│ │ │ │ ├── vslider_nor.png
│ │ │ │ └── vslider_pressed.png
│ │ │ ├── QSpinBox
│ │ │ │ ├── arrow_disabled.png
│ │ │ │ ├── arrow_hover-01.png
│ │ │ │ ├── arrow_hover-02.png
│ │ │ │ ├── arrow_nor.png
│ │ │ │ ├── arrow_pressed.png
│ │ │ │ ├── disable.png
│ │ │ │ ├── downarrow_disabled.png
│ │ │ │ ├── downarrow_hover-01.png
│ │ │ │ ├── downarrow_hover-02.png
│ │ │ │ ├── downarrow_nor.png
│ │ │ │ ├── downarrow_pressed.png
│ │ │ │ ├── editable_hover.png
│ │ │ │ ├── editable_nor.png
│ │ │ │ ├── editable_pressed.png
│ │ │ │ ├── uneditable_hover.png
│ │ │ │ ├── uneditable_nor.png
│ │ │ │ └── uneditable_pressed.png
│ │ │ ├── QTabBar
│ │ │ │ ├── disabled.png
│ │ │ │ ├── hover.png
│ │ │ │ ├── nor.png
│ │ │ │ ├── pressed.png
│ │ │ │ └── seled.png
│ │ │ ├── QTableView
│ │ │ │ ├── form_hover.png
│ │ │ │ ├── form_pressed.png
│ │ │ │ ├── form_selecyed.png
│ │ │ │ ├── hline.png
│ │ │ │ ├── sidebar_hover.png
│ │ │ │ ├── sidebar_nor.png
│ │ │ │ ├── sidebar_pressed.png
│ │ │ │ ├── sidebar_selected.png
│ │ │ │ ├── title_hover.png
│ │ │ │ ├── title_nor.png
│ │ │ │ ├── title_pressed.png
│ │ │ │ ├── title_secelecd.png
│ │ │ │ └── vline.png
│ │ │ └── QTreeView
│ │ │ │ ├── bg.png
│ │ │ │ ├── branch_bg_hover.png
│ │ │ │ ├── branch_bg_nor.png
│ │ │ │ ├── branch_bg_pass on.png
│ │ │ │ ├── branch_close.png
│ │ │ │ ├── branch_end.png
│ │ │ │ ├── branch_more.png
│ │ │ │ ├── branch_open.png
│ │ │ │ ├── branch_vline.png
│ │ │ │ └── header.png
│ │ ├── pause.png
│ │ ├── quick.png
│ │ ├── restart.png
│ │ └── stop.png
│ ├── src
│ │ ├── component
│ │ │ └── playwidget.cpp
│ │ ├── main.cpp
│ │ ├── mainwindow.cpp
│ │ ├── pluginsmanager.cpp
│ │ └── util.cpp
│ └── ui
│ │ ├── about.ui
│ │ └── mainwindow.ui
├── dtui
│ ├── draws
│ │ └── README.md
│ ├── dtui.pro
│ ├── include
│ │ ├── dt_stylesheets.h
│ │ ├── dtbutton.h
│ │ ├── dtcheckbox.h
│ │ ├── dtframelesswidget.h
│ │ ├── dtgraphicsitem.h
│ │ ├── dtgraphicsscene.h
│ │ ├── dtgraphicstool.h
│ │ ├── dtgraphicsview.h
│ │ ├── dtgroupbox.h
│ │ ├── dtgroupbox.h.autosave.bIsskx
│ │ ├── dtlabel.h
│ │ ├── dtpainter.h
│ │ ├── dtprogressbar.h
│ │ ├── dtrangeslider.h
│ │ ├── dtscrollbar.h
│ │ ├── dttabwidget.h
│ │ ├── dttitlebar.h
│ │ ├── dttoolbar.h
│ │ ├── dttoolset.h
│ │ ├── dtui.h
│ │ ├── dtundocommand.h
│ │ ├── sizehandle.h
│ │ ├── stdafx.h
│ │ └── stdafx.h.cpp
│ ├── resources
│ │ └── icon.ico
│ └── src
│ │ ├── dtbutton.cpp
│ │ ├── dtcheckbox.cpp
│ │ ├── dtgraphicsitem.cpp
│ │ ├── dtgraphicsscene.cpp
│ │ ├── dtgraphicstool.cpp
│ │ ├── dtgraphicsview.cpp
│ │ ├── dtgroupbox.cpp
│ │ ├── dtlabel.cpp
│ │ ├── dtpainter.cpp
│ │ ├── dtprogressbar.cpp
│ │ ├── dtrangeslider.cpp
│ │ ├── dtscrollbar.cpp
│ │ ├── dttabwidget.cpp
│ │ ├── dttitlebar.cpp
│ │ ├── dttoolbar.cpp
│ │ ├── dttoolset.cpp
│ │ ├── dtui.cpp
│ │ └── sizehandle.cpp
├── main.pri
└── main.pro
└── scripts
├── README.md
├── pack.py
├── plugins_creator.py
├── requirements.txt
└── upload.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # build
2 | build/
3 | build*/
4 | bin/
5 | *.user /
6 | *.vs/
7 | *debug/
8 | *release/
9 | *.vcxproj.user /
10 | *.vcxproj /
11 | *.sln /
12 | *.package/
13 | package/
14 | *.sln
15 | *.qmake
16 | *.user
17 | *.vcxproj
18 | *.filters
19 | *.stash
20 | *.qtc_clangd
21 | *.autosave
22 | *.pyc
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 huifeng
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DT Framework - 现代化的Qt客户端开发框架
2 |
3 |
4 |
5 | [](https://github.com/huifeng-kooboo/DT/stargazers)
6 | [](https://github.com/huifeng-kooboo/DT/issues)
7 | [](https://github.com/huifeng-kooboo/DT/forks)
8 | [](https://github.com/huifeng-kooboo/DT/)
9 | [](https://github.com/huifeng-kooboo/DT/blob/master/LICENSE)
10 |
11 |
12 |
13 | ## 📚 项目介绍
14 |
15 | DT Framework 是一个基于 Qt 的现代化客户端开发框架,采用组件化设计思想,致力于提供高效、灵活的桌面应用开发解决方案。该框架已在多个商业项目中得到验证,包括 AI 智能相机等大型应用。
16 |
17 | ### 🌟 核心特性
18 |
19 | - **组件化架构**: 采用"all function is a tool"的设计理念,实现高度模块化
20 | - **Vue 式开发体验**: UI 与业务逻辑紧密绑定,提供类似 Vue 的开发体验
21 | - **丰富的 Qt 生态**: 充分利用 Qt 框架的强大功能和丰富文档
22 | - **高扩展性**: 基于插件化设计,支持灵活的功能扩展
23 | - **商业验证**: 已在多个大型商业项目中稳定运行
24 |
25 | ### 🔨 技术架构
26 |
27 | - **核心框架**: Qt 5.14.2
28 | - **编译工具**: MSVC 2017 64bit
29 | - **插件系统**: 自研插件化架构
30 | - **UI 框架**: 自定义 UI 组件库
31 | - **开发模式**: 组件化、插件化
32 |
33 | ### 📦 项目结构
34 |
35 | '''
36 | ├── allplugins/ # 插件模块目录
37 | ├── bin/ # 可执行文件目录
38 | ├── depends/ # 依赖文件
39 | ├── global/ # 全局配置
40 | ├── main/ # 主程序模块
41 | ├── qss_res/ # 样式资源
42 | └── scripts/ # 部署脚本
43 | '''
44 |
45 | ## 🚀 快速开始
46 |
47 | ### 环境要求
48 |
49 | - Qt 5.14.2
50 | - Visual Studio 2017 (MSVC)
51 | - Windows 操作系统
52 |
53 | ### 安装步骤
54 |
55 | 1. 安装 Qt 5.14.2
56 | 2. 配置 MSVC 2017 环境
57 | 3. 克隆项目代码
58 | 4. 使用 Qt Creator 打开并编译
59 |
60 | 详细安装说明请参考[官方文档](https://www.notion.so/DT-Framework-7496c923274d4deaace5d22f4ad69080?pvs=4)
61 |
62 | ## 💼 商业合作
63 |
64 | 本人专注于 Qt/C++ 开发,提供专业的远程开发服务:
65 |
66 | - **专业领域**: Qt 客户端开发、框架设计
67 | - **项目经验**: AI 智能相机等大型商业项目
68 | - **服务方式**: 远程开发、技术咨询
69 |
70 | ### 联系方式
71 |
72 | - 💬 微信: ytouching
73 | - 📧 邮箱: gisdoing@gmail.com
74 | - 🔗 QQ: 942840260
75 |
76 |
77 |

78 |
79 |
80 | ## 🤝 技术交流
81 |
82 | 欢迎加入我们的技术交流群,讨论 Qt/C++ 相关技术:
83 |
84 |
85 |

86 |
87 |
88 | ## 📋 开发路线图
89 |
90 | - [ ] UI 控件功能完善
91 | - [ ] 单元测试覆盖
92 | - [ ] 技术文档完善
93 | - [ ] 自动更新功能
94 | - [ ] 框架性能优化
95 |
96 | ## 🎯 项目演示
97 |
98 | - [AI智能相机演示视频](https://ytouch-1258011219.cos.ap-nanjing.myqcloud.com/preview_cu.mp4)
99 | - [下载Demo](https://ytouch-1258011219.cos.ap-nanjing.myqcloud.com/DTDemo.zip)
100 |
101 | ## 💖 支持项目
102 |
103 | 如果您觉得项目对您有帮助,欢迎打赏支持:
104 |
105 |
106 |

107 |
108 |
109 | ## 📄 开源协议
110 |
111 | 本项目采用 MIT 协议开源,欢迎自由使用和贡献代码。
112 |
113 |
--------------------------------------------------------------------------------
/allplugins/README.md:
--------------------------------------------------------------------------------
1 | #### 说明
2 |
3 | ----
4 |
5 | 该文件夹主要存放插件的代码库,统一通过```plugins.pro```来管理所有的插件,是否加载插件,通过```plugins.json```来配置,配置中包含四个参数
6 |
7 | ```json
8 | {
9 | "plugins":[{
10 | "plugins_name":"service.dll", //插件名
11 | "plugins_version":"1.0", // 插件版本
12 | "plugins_desc":"test-desc", //插件描述
13 | "plugins_state":"0" //插件状态 0:默认启动加载 1:动态加载
14 | }]
15 | }
16 | ```
17 |
18 | -----
19 |
20 | 所有插件均需要引入plugins_base的头文件,通过继承plugins_base的类,各自实现```loadUI```方法以及```slotEventFromPlugins```方法,其中```loadUI()```方法主要是用于绘制各自插件的ui界面,```slotEventFromPlugins```方法主要是用于处理插件接收主程序的消息,以及插件处理其他插件的透传消息等,实现插件之间的通信等。
21 |
22 | ##### 编译方式:
23 |
24 | * 点击plugins.pro 即可进行编译,编译生成目录在```bin/plugins```目录下
--------------------------------------------------------------------------------
/allplugins/images/images.pro:
--------------------------------------------------------------------------------
1 | include (../../main/main.pri)
2 | QT += core gui
3 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
4 |
5 | TEMPLATE = lib
6 | DEFINES += Images_LIBRARY
7 |
8 | # 生成文件路径
9 | DESTDIR = $$PWD/../../bin/plugins/
10 |
11 | # 生成文件名称: ex: images: 生成文件名为:images.exe [WIN]
12 | TARGET = images
13 |
14 | CONFIG += c++14
15 |
16 | # The following define makes your compiler emit warnings if you use
17 | # any Qt feature that has been marked deprecated (the exact warnings
18 | # depend on your compiler). Please consult the documentation of the
19 | # deprecated API in order to know how to port your code away from it.
20 | DEFINES += QT_DEPRECATED_WARNINGS
21 |
22 | # You can also make your code fail to compile if it uses deprecated APIs.
23 | # In order to do so, uncomment the following line.
24 | # You can also select to disable deprecated APIs only up to a certain version of Qt.
25 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
26 |
27 | # 添加预编译头文件
28 | CONFIG += PRECOMPILED_HEADER
29 | PRECOMPILED_HEADER = $$PWD/include/stdafx.h
30 |
31 |
32 | # 引入文件部分
33 |
34 | INCLUDEPATH +=\
35 | include \
36 | src \
37 | ../plugins_base \
38 |
39 | SOURCES += \
40 | src/images.cpp \
41 | src/widgets/account_widget.cpp \
42 | src/widgets/sidebar_widget.cpp
43 |
44 |
45 | HEADERS += \
46 | include/images_global.h \
47 | include/images.h \
48 | ../plugins_base/pluginsmanager_base.h \
49 | include/stdafx.h \
50 | include/widgets/account_widget.h \
51 | include/widgets/sidebar_widget.h
52 |
53 | # Resource部分
54 |
55 | RESOURCES += \
56 | images.qrc
57 |
58 |
59 | # 添加依赖的静态库
60 | win32::LIBS += $$PWD/../../bin/common.lib
61 | win32::LIBS += $$PWD/../../bin/dtui.lib
62 |
63 |
64 | # Default rules for deployment.
65 | unix {
66 | target.path = /usr/lib
67 | }
68 | !isEmpty(target.path): INSTALLS += target
69 |
70 |
71 |
--------------------------------------------------------------------------------
/allplugins/images/images.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | resources/test.png
4 |
5 |
6 |
--------------------------------------------------------------------------------
/allplugins/images/include/images.h:
--------------------------------------------------------------------------------
1 | #ifndef Images_H
2 | #define Images_H
3 |
4 | #include "pluginsmanager_base.h"
5 | #include "images_global.h"
6 | #include "../../main/dtui/include/dtbutton.h"
7 | #include "widgets/sidebar_widget.h"
8 | #include "widgets/account_widget.h"
9 |
10 | #define PLUGIN_Images_IID "Plugin.Images"
11 |
12 | /**
13 | Image插件主类
14 | */
15 | class Images_EXPORT Images : public DTPluginBase
16 | {
17 | Q_OBJECT
18 | Q_PLUGIN_METADATA(IID PLUGIN_Images_IID)
19 | public:
20 | Images(QObject* qobj=nullptr);
21 |
22 | ~Images();
23 |
24 | void loadUI() override;
25 |
26 | private slots:
27 | void slots_HotBtnClicked();
28 |
29 | public:
30 | void slotEventFromPlugins(const PluginMetaData& plt) override;
31 | QVariant slotHandleMessage(const PluginMetaData &plt) override;
32 |
33 | private:
34 | QSharedPointer m_pTestBtn; // 测试按钮
35 | QSharedPointer m_pSideBar; // 侧边栏
36 | QSharedPointer m_pAccountWidget; // 账户登录窗体
37 | QHBoxLayout * m_pHboxLayout;
38 |
39 | /**
40 | * 本地草稿、我的云空间、热门活动
41 | */
42 | QSharedPointer m_pLocalBtn; // 本地按钮
43 | QSharedPointer m_pCloudBtn; // 云空间
44 | QSharedPointer m_pHotBtn; // 热门活动
45 |
46 | /*
47 | * 云空间登录按钮
48 | */
49 | QSharedPointer m_pLoginBtn; // 登录按钮
50 |
51 | };
52 |
53 | #endif // Images_H
54 |
--------------------------------------------------------------------------------
/allplugins/images/include/images_global.h:
--------------------------------------------------------------------------------
1 | #ifndef Images_GLOBAL_H
2 | #define Images_GLOBAL_H
3 |
4 | #include
5 |
6 | #if defined(Images_LIBRARY)
7 | # define Images_EXPORT Q_DECL_EXPORT
8 | #else
9 | # define Images_EXPORT Q_DECL_IMPORT
10 | #endif
11 |
12 | #endif // Images_GLOBAL_H
13 |
--------------------------------------------------------------------------------
/allplugins/images/include/stdafx.h:
--------------------------------------------------------------------------------
1 | #ifndef STDAFX_H
2 | #define STDAFX_H
3 |
4 |
5 | // QT 相关的库
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 | #include
15 | #include
16 |
17 | #endif // STDAFX_H
18 |
--------------------------------------------------------------------------------
/allplugins/images/include/widgets/account_widget.h:
--------------------------------------------------------------------------------
1 | #ifndef ACCOUNT_WIDGET_H
2 | #define ACCOUNT_WIDGET_H
3 |
4 | class AccountWidget: public QWidget{
5 | public:
6 | AccountWidget(QWidget* pWidget);
7 | ~AccountWidget();
8 |
9 |
10 | private:
11 | void init();
12 |
13 |
14 | private:
15 | QVBoxLayout* m_pMainLayout;
16 |
17 | QHBoxLayout* m_pLoginLayout;
18 | QHBoxLayout* m_pInfoLayout;
19 |
20 |
21 | // 相关控件按钮
22 | QLabel* m_pLogoLabel;
23 | QPushButton* m_pLoginButton;
24 | QPushButton* m_pInfoButton;
25 |
26 | };
27 |
28 | #endif // ACCOUNT_WIDGET_H
29 |
--------------------------------------------------------------------------------
/allplugins/images/include/widgets/sidebar_widget.h:
--------------------------------------------------------------------------------
1 | #ifndef SIDEBAR_WIDGET_H
2 | #define SIDEBAR_WIDGET_H
3 |
4 | /**
5 | * @brief: 侧边栏
6 | *
7 | */
8 | class SideBarWidget: public QWidget{
9 | public:
10 | SideBarWidget(QWidget* pParent);
11 | ~SideBarWidget();
12 |
13 | private:
14 | void init();
15 | void initData();
16 | void initStyle();
17 |
18 | private:
19 | QVBoxLayout * m_pVBoxLayout;
20 |
21 | };
22 |
23 | #endif // SIDEBAR_WIDGET_H
24 |
--------------------------------------------------------------------------------
/allplugins/images/resources/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/allplugins/images/resources/test.png
--------------------------------------------------------------------------------
/allplugins/images/src/images.cpp:
--------------------------------------------------------------------------------
1 | #include "images.h"
2 |
3 |
4 | // 默认最多保存多少张图
5 | #define MAX_IMAGE_SIZE 100
6 |
7 | Images::Images(QObject*)
8 | {
9 | /**
10 | * 设置Dll类型 后期优化的时候需要使用
11 | */
12 | setProperty("dllType",MSG_DLL_IMAGES);
13 | m_uiObject = nullptr;
14 | Q_INIT_RESOURCE(images);
15 | }
16 |
17 | Images::~Images()
18 | {
19 | // UnLoadToDo
20 | }
21 |
22 | void Images::loadUI()
23 | {
24 | /**
25 | * @brief: 添加测试按钮控件增加
26 | *
27 | */
28 | if (m_uiObject != nullptr)
29 | {
30 | QWidget* pMainWidget = dynamic_cast(m_uiObject);
31 |
32 | // 布局设置开始
33 | m_pHboxLayout = new QHBoxLayout();
34 | m_pHboxLayout->setSpacing(0);
35 | m_pHboxLayout->setMargin(0);
36 | QVBoxLayout* vBoxLayout = (QVBoxLayout*)pMainWidget->layout();
37 | vBoxLayout->addLayout(m_pHboxLayout);
38 | // 布局设置结束
39 |
40 | m_pLocalBtn = QSharedPointer(new DTButton(nullptr),&QObject::deleteLater);
41 | m_pLocalBtn->setText("本地草稿");
42 | m_pLocalBtn->setIcon(QIcon(":/resources/folder.png"));
43 | m_pLocalBtn->setStyleSheet("QPushButton {background-color: rgb(36, 36, 37); color:rgb(250, 250, 250); font: 12px; font-family:'Microsoft YaHei'; border-radius: 14px;}"
44 | "QPushButton:hover {background-color: rgb(38, 38, 38);}"
45 | "");
46 | m_pLocalBtn->setFixedSize(QSize(180,40));
47 | m_pLocalBtn->show();
48 |
49 |
50 | m_pCloudBtn = QSharedPointer(new DTButton(nullptr),&QObject::deleteLater);
51 | m_pCloudBtn->setText("我的云空间");
52 | m_pCloudBtn->setIcon(QIcon(":/resources/cloud.png"));
53 | m_pCloudBtn->setStyleSheet("QPushButton { padding-left: 12px; background-color: rgb(36, 36, 37); color:rgb(250, 250, 250); font: 12px; font-family:'Microsoft YaHei'; border-radius: 14px;}"
54 | "QPushButton:hover {background-color: rgb(38, 38, 38);}"
55 | "");
56 | m_pCloudBtn->setFixedSize(QSize(180,40));
57 | m_pCloudBtn->show();
58 |
59 | m_pHotBtn = QSharedPointer(new DTButton(nullptr),&QObject::deleteLater);
60 | m_pHotBtn->setText("热门活动");
61 | m_pHotBtn->setIcon(QIcon(":/resources/hot.png"));
62 | m_pHotBtn->setStyleSheet("QPushButton {background-color: rgb(36, 36, 37); color:rgb(250, 250, 250); font: 12px; font-family:'Microsoft YaHei'; border-radius: 14px;}"
63 | "QPushButton:hover {background-color: rgb(38, 38, 38);}"
64 | "");
65 | m_pHotBtn->setFixedSize(QSize(180,40));
66 | m_pHotBtn->show();
67 |
68 | connect(m_pHotBtn.get(),SIGNAL(clicked()),this, SLOT(slots_HotBtnClicked()));
69 |
70 | m_pSideBar = QSharedPointer(new SideBarWidget(nullptr),&QObject::deleteLater);
71 | m_pSideBar->setFixedWidth(250);
72 |
73 |
74 | m_pAccountWidget = QSharedPointer(new AccountWidget(nullptr),&QObject::deleteLater);
75 |
76 | m_pAccountWidget->setFixedSize(QSize(200,100));
77 |
78 | QVBoxLayout * pVBoxLayout = (QVBoxLayout*)m_pSideBar->layout();
79 | pVBoxLayout->addSpacerItem(new QSpacerItem(2,50,QSizePolicy::Fixed));
80 | pVBoxLayout->addWidget(m_pAccountWidget.data(),0,Qt::AlignHCenter);
81 | pVBoxLayout->addSpacerItem(new QSpacerItem(2,40,QSizePolicy::Fixed));
82 | pVBoxLayout->addWidget(m_pLocalBtn.data(),0,Qt::AlignHCenter);
83 | pVBoxLayout->addSpacerItem(new QSpacerItem(2,10,QSizePolicy::Fixed));
84 | pVBoxLayout->addWidget(m_pCloudBtn.data(),0,Qt::AlignHCenter);
85 | pVBoxLayout->addSpacerItem(new QSpacerItem(2,10,QSizePolicy::Fixed));
86 | pVBoxLayout->addWidget(m_pHotBtn.data(),0,Qt::AlignHCenter);
87 | pVBoxLayout->addStretch();
88 |
89 | m_pHboxLayout->addWidget(m_pSideBar.data());
90 |
91 | m_pHboxLayout->addStretch();
92 | }
93 |
94 | }
95 |
96 | QVariant Images::slotHandleMessage(const PluginMetaData &plt)
97 | {
98 | // 同步消息处理
99 | return QVariant("");
100 | }
101 |
102 | void Images::slots_HotBtnClicked()
103 | {
104 | PluginMetaData plt;
105 | plt.enumMsg = E_MSG_TYPE::MSG_DLL_MAIN;
106 | plt.enumUiMsg = E_UI_MSG_TYPE::MSG_UI_IMAGE_HOT_PINK;
107 | // 异步--
108 | sendSignalAsyn(plt);
109 | }
110 |
111 | void Images::slotEventFromPlugins(const PluginMetaData& plt)
112 | {
113 | // 异步事件
114 |
115 | m_uiObject = plt.qObject;
116 | switch (plt.enumUiMsg) {
117 | case E_UI_MSG_TYPE::MSG_UI_NONE:
118 | break;
119 | default:
120 | break;
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/allplugins/images/src/widgets/account_widget.cpp:
--------------------------------------------------------------------------------
1 | #include "widgets/account_widget.h"
2 |
3 | #pragma execution_character_set("utf-8")
4 |
5 | AccountWidget::AccountWidget(QWidget* pWidget): QWidget(pWidget)
6 | {
7 | m_pMainLayout = new QVBoxLayout();
8 |
9 | m_pLoginLayout = new QHBoxLayout();
10 | m_pInfoLayout = new QHBoxLayout();
11 | this->setLayout(m_pMainLayout);
12 |
13 | m_pLogoLabel = new QLabel();
14 | m_pLoginButton = new QPushButton();
15 | m_pInfoButton = new QPushButton();
16 | init();
17 | }
18 |
19 | AccountWidget::~AccountWidget()
20 | {
21 |
22 | }
23 |
24 | void AccountWidget::init()
25 | {
26 | this->setStyleSheet("QWidget { background-color:rgb(36, 36, 37); color:rgb(229, 229, 229); font-family:'Microsoft YaHei'; border-radius:8px; }");
27 |
28 | m_pMainLayout->addLayout(m_pLoginLayout);
29 | m_pMainLayout->addLayout(m_pInfoLayout);
30 |
31 | m_pLogoLabel->setStyleSheet("QLabel{background-color: rgb(53, 53, 54); color: rgb(128, 128, 128); font: 12px;}");
32 | m_pInfoButton->setStyleSheet("QPushButton{background-color: rgb(53, 53, 54); color: rgb(128, 128, 128); font:12px; font-weight:bold; border-radius: 5px;}");
33 | m_pLoginButton->setStyleSheet("QPushButton{ font: 12px; font-weight:bold;}");
34 | m_pInfoButton->setFixedHeight(30);
35 |
36 | m_pInfoButton->setText("开通会员得 100GB 云空间");
37 | m_pInfoButton->setFlat(true);
38 |
39 | m_pLogoLabel->setPixmap(QPixmap(":/resources/login.png"));
40 | m_pLoginButton->setText("点击登录账户");
41 | m_pLoginButton->setIcon(QIcon(":/resources/login.png"));
42 | m_pLoginButton->setFlat(true);
43 |
44 | //m_pLoginLayout->addWidget(m_pLogoLabel);
45 | m_pLoginLayout->addWidget(m_pLoginButton);
46 | m_pInfoLayout->addWidget(m_pInfoButton);
47 | // m_pLogoLabel->setPixmap();
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/allplugins/images/src/widgets/sidebar_widget.cpp:
--------------------------------------------------------------------------------
1 | #include "widgets/sidebar_widget.h"
2 |
3 | SideBarWidget::SideBarWidget(QWidget* pParent):QWidget(pParent)
4 | {
5 | init();
6 | }
7 |
8 | void SideBarWidget::init()
9 | {
10 | initStyle();
11 | initData();
12 | }
13 |
14 | void SideBarWidget::initStyle()
15 | {
16 | this->setStyleSheet("QWidget{ background-color: rgb(27, 27, 28); color: rgb(212, 212, 212); }");
17 | m_pVBoxLayout = new QVBoxLayout();
18 | this->setLayout(m_pVBoxLayout);
19 | }
20 |
21 | void SideBarWidget::initData()
22 | {
23 |
24 | }
25 |
26 | SideBarWidget::~SideBarWidget()
27 | {
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/allplugins/plugins.json:
--------------------------------------------------------------------------------
1 | {
2 | "plugins":[{
3 | "plugins_name":"images.dll",
4 | "plugins_version":"1.0",
5 | "plugins_desc":"测试插件功能使用",
6 | "plugins_state":"0"
7 | }]
8 | }
--------------------------------------------------------------------------------
/allplugins/plugins.pro:
--------------------------------------------------------------------------------
1 | TEMPLATE = subdirs
2 |
3 | # 该Config实现顺序编译
4 | CONFIG += ordered
5 |
6 |
7 | SUBDIRS +=\
8 | images \
9 |
--------------------------------------------------------------------------------
/allplugins/plugins_base/README.md:
--------------------------------------------------------------------------------
1 | #### 说明
2 |
3 | -----
4 |
5 | * 目前存放公共基类,后续可能会扩展该目录
--------------------------------------------------------------------------------
/allplugins/plugins_base/pluginsmanager_base.h:
--------------------------------------------------------------------------------
1 | #ifndef PLUGINSMANAGER_BASE_H
2 | #define PLUGINSMANAGER_BASE_H
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include "../../global/define.h"
8 |
9 |
10 | #define PRIVATE_METHOD private
11 | #define PUBLIC_METHOD public
12 |
13 | // 处理中文乱码使用
14 | #if defined(_MSC_VER) && (_MSC_VER >= 1600)
15 | # pragma execution_character_set("utf-8")
16 | #endif
17 |
18 | // 子插件通用的基类模块
19 | class DTPluginBase: public QObject
20 | {
21 |
22 | Q_OBJECT
23 |
24 | public:
25 | // 所有插件均需要实现loadUI()方法,可以是空实现
26 | virtual void loadUI() = 0;
27 |
28 | Q_SIGNALS:
29 |
30 | /**
31 | * @brief: 同步方法:直接获取返回值处理
32 | */
33 | QVariant signalSendMessage(const PluginMetaData&);
34 |
35 | /*
36 | * @brief: 同步信号
37 | */
38 | void sendSignalToPlugins(const PluginMetaData&);
39 |
40 | /**
41 | * 异步信号增加
42 | */
43 | void sendSignalToPluginsAsync(const PluginMetaData&);
44 |
45 | PUBLIC_METHOD:
46 |
47 | /**
48 | * @brief: 同步发送信号
49 | */
50 | virtual void sendSignal(const PluginMetaData& plt)
51 | {
52 | emit sendSignalToPlugins(plt);
53 | }
54 |
55 | /**
56 | * @brief: 异步发送信号
57 | */
58 | virtual void sendSignalAsyn(const PluginMetaData& plt)
59 | {
60 | emit sendSignalToPluginsAsync(plt);
61 | }
62 |
63 | private:
64 | // 加载样式表
65 | void loadStyleSheet(const QString& qsStyleFile)
66 | {
67 | QFile qss(qsStyleFile);
68 | qss.open(QFile::ReadOnly);
69 | // 需要去覆盖对应文件
70 | qApp->setStyleSheet(qApp->styleSheet() + qss.readAll());
71 | qss.close();
72 | }
73 |
74 | public slots:
75 |
76 |
77 | /**
78 | * @brief: 处理回调事件
79 | * 处理事件当中的名称
80 | */
81 | virtual void slotEventFromPlugins(const PluginMetaData& plt) = 0;
82 |
83 | /**
84 | * @brief: 设置UI句柄
85 | * ex: 在loadUi信号中会进行设置绑定
86 | */
87 | virtual void slotSetUIHandle(QObject* uiObject)
88 | {
89 | if(uiObject != nullptr)
90 | {
91 | m_uiObject = uiObject;
92 | // 加载UI事件
93 | loadUI();
94 | }
95 | }
96 |
97 | /**
98 | * @brief: 同步消息处理
99 | * 返回值:返回同步结果
100 | */
101 | virtual QVariant slotHandleMessage(const PluginMetaData& plt) = 0;
102 |
103 |
104 | /**
105 | * @brief: 发送信号槽函数
106 | */
107 | virtual void slotSendSignal(const PluginMetaData& plt)
108 | {
109 | sendSignal(plt);
110 | }
111 |
112 |
113 | public:
114 |
115 | /**
116 | * @brief: 主窗口句柄
117 | */
118 | QObject* m_uiObject;
119 | };
120 |
121 | #endif // PLUGINSMANAGER_BASE_H
122 |
--------------------------------------------------------------------------------
/depends/Qt5Network.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/depends/Qt5Network.dll
--------------------------------------------------------------------------------
/depends/msvcp140.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/depends/msvcp140.dll
--------------------------------------------------------------------------------
/depends/ucrtbase.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/depends/ucrtbase.dll
--------------------------------------------------------------------------------
/depends/vcruntime140.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/depends/vcruntime140.dll
--------------------------------------------------------------------------------
/docs/DT教程01.md:
--------------------------------------------------------------------------------
1 | # [DT框架使用教程01]如何在DT框架中创建插件
2 |
3 | ---
4 |
5 |
6 |
7 | DT框架代码地址: ```https://github.com/huifeng-kooboo/DT```
8 |
9 | 由于国内访问速度的问题 也可以访问gitee的地址: ```https://gitee.com/huifeng_github/DT```
10 |
11 | DT框架是基于QT框架衍生出的组件化框架。
12 |
13 | 对于想具体了解DT框架的同学,介绍可以查看[该处](https://blog.csdn.net/Giser_D/article/details/128235728?spm=1001.2014.3001.5501) 访问链接: ```https://blog.csdn.net/Giser_D/article/details/128235728```
14 |
15 | ----
16 |
17 | 目前针对于DT框架创建插件的话,可以使用两种方式进行创建
18 |
19 | ---
20 |
21 | - 1. 采用```QtCreator```可视化界面进行创建
22 |
23 | (1)使用QtCreator 打开```Plugins.pro```
24 |
25 | 
26 |
27 | (2)右键```plugins.pro``` 点击新建子项目
28 |
29 | 
30 |
31 | (3)选择```C++Library```
32 |
33 | 
34 |
35 | (4) 输入名称 这边为了演示 选择```demo```
36 |
37 | 
38 |
39 | (5)一路下一步 可以看到插件补充进去了
40 |
41 | 
42 |
43 | (6)修改```demo.pro```参数
44 |
45 | ```
46 | # 添加依赖的静态库
47 | win32::LIBS += $$PWD/../../bin/libcommon.a
48 | win32::LIBS += $$PWD/../../bin/libdtui.a
49 |
50 | # 生成文件路径
51 | DESTDIR = $$PWD/../../bin/plugins/
52 | # 生成文件名称
53 | TARGET = demo
54 |
55 | HEADERS += ../plugins_base/pluginsmanager_base.h \ # 添加plugin_base的引用
56 | ```
57 |
58 | 
59 |
60 | (7)```demo.h``` 进行调整
61 |
62 | ```cpp
63 | #ifndef DEMO_H
64 | #define DEMO_H
65 |
66 | #include "demo_global.h"
67 | #include "pluginsmanager_base.h"
68 |
69 |
70 | #define PLUGIN_Demo_IID "Plugin.Demo"
71 | class DEMO_EXPORT Demo: public DTPluginBase
72 | {
73 | Q_OBJECT
74 | Q_PLUGIN_METADATA(IID PLUGIN_Demo_IID)
75 | public:
76 | Demo(QObject* qobj=nullptr);
77 |
78 | void loadUI() override;
79 |
80 | public:
81 | void slotEventFromPlugins(const PluginMetaData& plt) override;
82 | QVariant slotHandleMessage(const PluginMetaData &plt) override;
83 |
84 | };
85 |
86 | #endif // DEMO_H
87 | ```
88 |
89 | (8)编译生成插件
90 |
91 | ---
92 |
93 | 2. 复制框架用例的插件(推荐)
94 |
95 | 复制框架用例的插件,进行修改名称等,加入plugins.pro文件中即可
96 |
97 |
98 |
99 | ---
100 |
101 | 3. 可视化界面新增插件 TODO
--------------------------------------------------------------------------------
/global/README.md:
--------------------------------------------------------------------------------
1 | #### 说明
2 |
3 | ----
4 |
5 | ```define.h```: 公共引用部分
--------------------------------------------------------------------------------
/global/define.h:
--------------------------------------------------------------------------------
1 | #ifndef GLOBAL_DEFINE_BASE_H
2 | #define GLOBAL_DEFINE_BASE_H
3 |
4 | #include
5 | #include
6 | #include
7 |
8 | // DLL名称类型 [可扩展]
9 | enum E_MSG_TYPE {
10 | MSG_NONE, // None
11 | MSG_DLL_MAIN, // 主程序
12 | MSG_DLL_SERVICE, // 服务dll,跟底层SDK或者HTTP请求交互的模块
13 | MSG_DLL_IMAGES, // IMAGES使用 DLL
14 | };
15 |
16 | // UI业务相关类型枚举 [可扩展]
17 | // 事件定义规范: MSG_UI_dll名称_事件名称
18 | // @brief: 主程序打开事件,则为MSG_UI_MAIN_OPEN : 统一的规范 方便管理
19 | enum E_UI_MSG_TYPE {
20 | MSG_UI_NONE, // None
21 | MSG_UI_MAIN_OPEN, // 打开事件
22 | MSG_UI_MAIN_CLOSE, // 关闭程序
23 |
24 | //Image
25 | MSG_UI_IMAGE_HOT_PINK = 1000, // HOT
26 | };
27 |
28 |
29 | /**
30 | * @brief: 通信结构体 【通用】
31 | *
32 | */
33 | struct PluginMetaData {
34 | bool bNeedAll; // 是否需要所有插件进行处理: true: all 处理【预留】
35 | QString qsSenderName; // 发送事件的发送者名称, 可为空【预留】
36 | QString qsReceiveName; // 需要处理的dll的名称,可为空【预留】
37 | E_MSG_TYPE enumMsg; // DLL类型【预留】
38 | E_UI_MSG_TYPE enumUiMsg; // ui/业务消息类型【预留】
39 | QVariant qvCustomData ; // 自定义数据等【预留】
40 | QObject *qObject = nullptr; // 传递窗体句柄 绘制界面
41 | QJsonObject qjExtraInfo = QJsonObject(); // 可扩展字段预留【预留】
42 | QMap qmapValue; // 可扩展字段: 针对于结构体等类型 QJsonObject不支持增加【预留】
43 | };
44 | Q_DECLARE_METATYPE(PluginMetaData); //消息
45 |
46 | #endif
47 |
--------------------------------------------------------------------------------
/images/README.md:
--------------------------------------------------------------------------------
1 | #### README
2 |
3 | ##### 说明:
4 |
5 | 该文件夹下为说明文档中引用的文件
--------------------------------------------------------------------------------
/images/open.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/images/open.jpg
--------------------------------------------------------------------------------
/images/plugins.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/images/plugins.jpg
--------------------------------------------------------------------------------
/images/qt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/images/qt.png
--------------------------------------------------------------------------------
/images/struct.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/images/struct.png
--------------------------------------------------------------------------------
/images/success.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/images/success.jpg
--------------------------------------------------------------------------------
/images/success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/images/success.png
--------------------------------------------------------------------------------
/main/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/main/README.md:
--------------------------------------------------------------------------------
1 | #### 说明
2 |
3 | ----
4 |
5 | * 该文件夹主要包含以下几块
6 |
7 | ```main.pro```:管理所有的主程序相关的代码:使用QtCreator打开即可编译
8 |
9 | ```main.pri```:定义一下公共参数提供给所有的仓库进行引用
10 |
11 | ```dtclient```:主程序代码入口
12 |
13 | ```common```:通用代码仓库,包括不限于文件管理,log日志管理,注册表管理等
14 |
15 | ```dtui```:重绘ui的代码仓库
--------------------------------------------------------------------------------
/main/common/.gitignore:
--------------------------------------------------------------------------------
1 | # This file is used to ignore files which are generated
2 | # ----------------------------------------------------------------------------
3 |
4 | *~
5 | *.autosave
6 | *.a
7 | *.core
8 | *.moc
9 | *.o
10 | *.obj
11 | *.orig
12 | *.rej
13 | *.so
14 | *.so.*
15 | *_pch.h.cpp
16 | *_resource.rc
17 | *.qm
18 | .#*
19 | *.*#
20 | core
21 | !core/
22 | tags
23 | .DS_Store
24 | .directory
25 | *.debug
26 | Makefile*
27 | *.prl
28 | *.app
29 | moc_*.cpp
30 | ui_*.h
31 | qrc_*.cpp
32 | Thumbs.db
33 | *.res
34 | *.rc
35 | /.qmake.cache
36 | /.qmake.stash
37 |
38 | # qtcreator generated files
39 | *.pro.user*
40 |
41 | # xemacs temporary files
42 | *.flc
43 |
44 | # Vim temporary files
45 | .*.swp
46 |
47 | # Visual Studio generated files
48 | *.ib_pdb_index
49 | *.idb
50 | *.ilk
51 | *.pdb
52 | *.sln
53 | *.suo
54 | *.vcproj
55 | *vcproj.*.*.user
56 | *.ncb
57 | *.sdf
58 | *.opensdf
59 | *.vcxproj
60 | *vcxproj.*
61 |
62 | # MinGW generated files
63 | *.Debug
64 | *.Release
65 |
66 | # Python byte code
67 | *.pyc
68 |
69 | # Binaries
70 | # --------
71 | *.dll
72 | *.exe
73 |
74 |
--------------------------------------------------------------------------------
/main/common/common.pro:
--------------------------------------------------------------------------------
1 | include (../main.pri)
2 |
3 | # 默认QT版本5.14.2 【原因: 开源的最新版本】
4 | QT += core gui
5 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
6 |
7 | DESTDIR = $$PWD/../../bin/
8 | TARGET = common
9 |
10 | TEMPLATE = lib
11 | DEFINES += COMMON_LIBRARY
12 |
13 | CONFIG += c++14
14 | CONFIG += staticlib
15 | CONFIG += PRECOMPILED_HEADER
16 | PRECOMPILED_HEADER = $$PWD/include/stdafx.h
17 |
18 | # The following define makes your compiler emit warnings if you use
19 | # any Qt feature that has been marked deprecated (the exact warnings
20 | # depend on your compiler). Please consult the documentation of the
21 | # deprecated API in order to know how to port your code away from it.
22 | DEFINES += QT_DEPRECATED_WARNINGS
23 |
24 | # You can also make your code fail to compile if it uses deprecated APIs.
25 | # In order to do so, uncomment the following line.
26 | # You can also select to disable deprecated APIs only up to a certain version of Qt.
27 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
28 |
29 | SOURCES += \
30 | src/common.cpp \
31 | src/dtfile.cpp \
32 | src/dtimages.cpp \
33 | src/dtjson.cpp \
34 | src/dtlog.cpp \
35 | src/dtregistry.cpp \
36 | src/dttime.cpp
37 |
38 | HEADERS += \
39 | include/common.h \
40 | include/dterrorcode.h \
41 | include/dtfile.h \
42 | include/dtimages.h \
43 | include/dtjson.h \
44 | include/dtlog.h \
45 | include/dtregistry.h \
46 | include/dttime.h \
47 | include/stdafx.h
48 |
49 | INCLUDEPATH +=\
50 | include \
51 | src \
52 |
53 |
54 |
55 | # Default rules for deployment.
56 | unix {
57 | target.path = /usr/lib
58 | }
59 | !isEmpty(target.path): INSTALLS += target
60 |
--------------------------------------------------------------------------------
/main/common/include/common.h:
--------------------------------------------------------------------------------
1 | #ifndef COMMON_H
2 | #define COMMON_H
3 |
4 | #include
5 |
6 | class CCommon{
7 |
8 | public:
9 | /*
10 | * @brief: 获取主窗口的句柄
11 | *
12 | */
13 | static QMainWindow* getMainWindow();
14 |
15 | static void setDefaultCode();
16 | };
17 |
18 |
19 |
20 |
21 | #endif // COMMON_H
22 |
--------------------------------------------------------------------------------
/main/common/include/dterrorcode.h:
--------------------------------------------------------------------------------
1 | #ifndef DTERRORCODE_H
2 | #define DTERRORCODE_H
3 |
4 | // 错误码模块
5 |
6 | enum DTErrorCode{
7 | SUCCESS = 0, //成功
8 | ERR_NETWORK , // 网络错误
9 | ERR_SERVER, // 服务端错误
10 | ERR_CLIENT, // 客户端错误
11 | ERR_OTHERS ,// 其他错误
12 |
13 | // 业务相关的错误码定义
14 | ERR_LOGIN_PASSWORD = 100, // 登录相关的错误码
15 | ERR_REGISTER_PASSWORD = 101, //注册错误
16 |
17 | };
18 |
19 | #endif // DTERRORCODE_H
20 |
--------------------------------------------------------------------------------
/main/common/include/dtfile.h:
--------------------------------------------------------------------------------
1 | #ifndef DTFILE_H
2 | #define DTFILE_H
3 |
4 | class DTFile{
5 | public:
6 | static bool createFile(const QString&qsFilePath, bool bReload);
7 | static bool createFolder(const QString&qsFolder, bool bReload);
8 | static bool deleteFile(const QString&qsFilePath);
9 | static bool deleteFolder(const QString&qsFolder);
10 | };
11 | #endif // DTFILE_H
12 |
--------------------------------------------------------------------------------
/main/common/include/dtimages.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGES_H
2 | #define IMAGES_H
3 |
4 | enum E_IMAGE_TYPE {
5 | IMAGE_BMP,
6 | IMAGE_JPG
7 | };
8 |
9 | /*
10 | * @brief: 图片相关的处理
11 | */
12 | class DTImages{
13 | /*
14 | * 保存图片到文件接口
15 | */
16 | static bool saveImageToFile(const QImage& qImage,const QString&qsFilePath,E_IMAGE_TYPE image_type);
17 | };
18 |
19 | #endif // IMAGES_H
20 |
--------------------------------------------------------------------------------
/main/common/include/dtjson.h:
--------------------------------------------------------------------------------
1 | #ifndef DTJSON_H
2 | #define DTJSON_H
3 |
4 | #define JSON DTJson::getInstance()
5 |
6 | /**
7 | * @brief: Json结构体的封装
8 | *
9 | */
10 | class DTJson {
11 | public:
12 | bool readJsonByFile(const QString &qsFilePath, QJsonDocument &qsJsonDocument);
13 | bool readJsonStr(const QString &qsJsonStr, QJsonDocument &qsJsonDocument);
14 | bool writeJsonToFile(const QString &qsJsonStr, const QString &qsFilePath);
15 | bool setValue(QJsonDocument &jsonDocument, const QString &qsKey,
16 | const QString &qsValue);
17 | bool getValue(QJsonDocument &jsonDocument, const QString &qsKey,
18 | QString &qsValue);
19 | bool saveJsonDocumentToFile(QJsonDocument &jsonDocument,
20 | const QString &qsFilePath);
21 | static DTJson &getInstance() {
22 | static DTJson dtJson;
23 | return dtJson;
24 | };
25 | private:
26 | DTJson();
27 | };
28 |
29 | #endif // DTJSON_H
30 |
--------------------------------------------------------------------------------
/main/common/include/dtlog.h:
--------------------------------------------------------------------------------
1 | #ifndef DTLOG_H
2 | #define DTLOG_H
3 |
4 | // 最大日志数量,默认10,超过删除
5 | #define MAX_LOGS_NUM 10
6 | #define DTLOG_PATH_FILENAME "%1_%2.log"
7 | #define Logger DTLog::getLog()
8 |
9 | class DTLog {
10 | public:
11 | DTLog();
12 | ~DTLog();
13 | static DTLog *getLog();
14 |
15 | // Log---Basic
16 | static void logMsg(QtMsgType type,const QString&qsMsg, bool isNeedDebug = true);
17 | static void logMsg(QtMsgType type,const QMessageLogContext &context,const QString &qsMsg);
18 |
19 | static void logFuncTime(const QString& functionName);
20 |
21 | // todo Log---Performance
22 | void functionStart(const QString &qsFunctionName);
23 | void functionEnd(const QString &qsFunctionName);
24 |
25 | // LogPath
26 | static bool createLogPath(const QString &qsSubPath,
27 | const QString &qsFileName);
28 |
29 | static void setLoggerState(bool isOpen);
30 |
31 | private:
32 | static bool isOpenLog;
33 | };
34 |
35 | #endif // DTLOG_H
36 |
--------------------------------------------------------------------------------
/main/common/include/dtregistry.h:
--------------------------------------------------------------------------------
1 | #ifndef DTREGISTRY_H
2 | #define DTREGISTRY_H
3 |
4 | // 注册表
5 | #define REG DTRegistry::getInstance()
6 |
7 | /**
8 | * @brief: 注册表相关的操作
9 | */
10 | class DTRegistry{
11 | public:
12 | DTRegistry();
13 | ~DTRegistry();
14 | static DTRegistry &getInstance();
15 | bool setDefaultName(const QString& qsDefaultName);
16 |
17 | bool setValue(const QString&qsKey,const QString&qsValue);
18 | bool getValue(const QString&qsKey,QString&qsValue);
19 |
20 | bool setValue(const QString&qsDefaultName,const QString&qsKey,const QString&qsValue);
21 | bool getValue(const QString&qsDefaultName,const QString&qsKey,QString&qsValue);
22 | private:
23 | QString m_qsDefaultName; // default_registry name
24 |
25 | };
26 |
27 | #endif // DTREGISTRY_H
28 |
--------------------------------------------------------------------------------
/main/common/include/dttime.h:
--------------------------------------------------------------------------------
1 | #ifndef DTTIME_H
2 | #define DTTIME_H
3 |
4 |
5 | class DTTime{
6 |
7 | public:
8 | /**
9 | * @brief: 获取当前时间戳
10 | * @return: String 时间戳字符串
11 | */
12 | static QString getCurrentTimeStamp();
13 |
14 |
15 | };
16 |
17 | #endif // DTTIME_H
18 |
--------------------------------------------------------------------------------
/main/common/include/stdafx.h:
--------------------------------------------------------------------------------
1 | #ifndef STDAFX_H
2 | #define STDAFX_H
3 | // 预编译头文件
4 |
5 | // QT相关
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 | #include
15 | #include
16 | #include
17 | #include
18 | #include
19 | #include
20 |
21 | #endif // STDAFX_H
22 |
--------------------------------------------------------------------------------
/main/common/include/stdafx.h.cpp:
--------------------------------------------------------------------------------
1 | /*--------------------------------------------------------------------
2 | * Precompiled header source file used by Visual Studio.NET to generate
3 | * the .pch file.
4 | *
5 | * Due to issues with the dependencies checker within the IDE, it
6 | * sometimes fails to recompile the PCH file, if we force the IDE to
7 | * create the PCH file directly from the header file.
8 | *
9 | * This file is auto-generated by qmake since no PRECOMPILED_SOURCE was
10 | * specified, and is used as the common stdafx.cpp. The file is only
11 | * generated when creating .vcxproj project files, and is not used for
12 | * command line compilations by nmake.
13 | *
14 | * WARNING: All changes made in this file will be lost.
15 | --------------------------------------------------------------------*/
16 | #include "stdafx.h"
17 |
--------------------------------------------------------------------------------
/main/common/src/common.cpp:
--------------------------------------------------------------------------------
1 | #include "common.h"
2 | #include
3 |
4 | QMainWindow* CCommon::getMainWindow()
5 | {
6 | foreach (QWidget *w, qApp->topLevelWidgets())
7 | if (QMainWindow* mainWin = qobject_cast(w))
8 | return mainWin;
9 | return nullptr;
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/main/common/src/dtfile.cpp:
--------------------------------------------------------------------------------
1 | #include "dtfile.h"
2 | #include "dtlog.h"
3 |
4 | bool DTFile::createFile(const QString &qsFilePath, bool bReload)
5 | {
6 | if(QFile::exists(qsFilePath))
7 | {
8 | Logger->logMsg(QtMsgType::QtInfoMsg,QString("%1 File Created.").arg(qsFilePath));
9 | if(bReload)
10 | {
11 | QFile::remove(qsFilePath);
12 | QFile files(qsFilePath);
13 | return true;
14 | }
15 | else{
16 | return true;
17 | }
18 | }
19 | QFile file(qsFilePath);
20 | if(!file.exists())
21 | {
22 | Logger->logMsg(QtMsgType::QtFatalMsg, QString("%1 file is create error").arg(qsFilePath));
23 | return false;
24 | }
25 |
26 | return true;
27 | }
28 |
29 | bool DTFile::deleteFile(const QString &qsFilePath)
30 | {
31 | if(QFile::exists(qsFilePath))
32 | {
33 | return QFile::remove(qsFilePath);
34 | }
35 | return true;
36 | }
37 |
38 | bool DTFile::createFolder(const QString &qsFolder, bool bReload)
39 | {
40 | QDir dir(qsFolder);
41 | if(!dir.exists())
42 | {
43 | Logger->logMsg(QtMsgType::QtInfoMsg,QString("创建文件夹:%1").arg(qsFolder));
44 | return dir.mkdir(qsFolder);
45 | }
46 | if(bReload)
47 | return true;
48 | return true;
49 | }
50 |
51 | bool DTFile::deleteFolder(const QString &qsFolder){
52 | if (qsFolder.isEmpty()){
53 | return false;
54 | }
55 | QDir dir(qsFolder);
56 | if(!dir.exists()){
57 | return true;
58 | }
59 | dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
60 | QFileInfoList fileList = dir.entryInfoList();
61 | foreach (QFileInfo file, fileList){
62 | if (file.isFile()){
63 | file.dir().remove(file.fileName());
64 | }else{
65 | deleteFolder(file.absoluteFilePath());
66 | }
67 | }
68 | return dir.rmdir(dir.absolutePath());
69 | }
70 |
--------------------------------------------------------------------------------
/main/common/src/dtimages.cpp:
--------------------------------------------------------------------------------
1 | #include "dtimages.h"
2 |
3 | bool DTImages::saveImageToFile(const QImage &qImage, const QString &qsFilePath,
4 | E_IMAGE_TYPE image_type) {
5 | return qImage.save(qsFilePath);
6 | }
7 |
--------------------------------------------------------------------------------
/main/common/src/dtjson.cpp:
--------------------------------------------------------------------------------
1 | #include "dtjson.h"
2 | #include "dtlog.h"
3 |
4 | DTJson::DTJson() {}
5 |
6 | bool DTJson::readJsonByFile(const QString &qsFilePath,
7 | QJsonDocument &qsJsonDocument) {
8 | if (QFile::exists(qsFilePath)) {
9 | QFile file(qsFilePath);
10 | file.open(QIODevice::ReadOnly | QIODevice::Text);
11 | if (!file.isOpen()) {
12 | Logger->logMsg(QtMsgType::QtSystemMsg, "Json文件打开失败");
13 | return false;
14 | }
15 | QString value = file.readAll();
16 | file.close();
17 | QJsonParseError parseJsonErr;
18 | qsJsonDocument = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
19 | if (parseJsonErr.error != QJsonParseError::NoError) {
20 | return false;
21 | }
22 | return true;
23 | } else {
24 | return false;
25 | }
26 | return false;
27 | }
28 |
29 | bool DTJson::readJsonStr(const QString &qsJsonStr,
30 | QJsonDocument &qsJsonDocument) {
31 | QJsonParseError jsonError;
32 | QJsonDocument jsonDoc(
33 | QJsonDocument::fromJson(qsJsonStr.toStdString().data(), &jsonError));
34 | if (jsonError.error != QJsonParseError::NoError) {
35 | return false;
36 | } else {
37 | qsJsonDocument = jsonDoc;
38 | return true;
39 | }
40 | }
41 |
42 | bool DTJson::writeJsonToFile(const QString &qsJsonStr,
43 | const QString &qsFilePath) {
44 | QFile file;
45 | file.setFileName(qsFilePath);
46 | if (file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
47 |
48 | {
49 | QTextStream in(&file);
50 | in << qsJsonStr << endl;
51 | }
52 | file.close();
53 | return true;
54 | }
55 |
56 | bool DTJson::setValue(QJsonDocument &jsonDocument, const QString &qsKey, const QString &qsValue)
57 | {
58 | QJsonObject qJsonObj = jsonDocument.object();
59 | qJsonObj.insert(qsKey,qsValue);
60 | return true;
61 | }
62 |
63 | bool DTJson::getValue(QJsonDocument &jsonDocument, const QString &qsKey, QString &qsValue)
64 | {
65 | QJsonObject qJsonObj = jsonDocument.object();
66 | qsValue = qJsonObj.value(qsKey).toString();
67 | return true;
68 | }
69 |
70 | bool DTJson::saveJsonDocumentToFile(QJsonDocument &jsonDocument, const QString &qsFilePath)
71 | {
72 | QByteArray qbArray = jsonDocument.toJson();
73 | QFile file;
74 | file.setFileName(qsFilePath);
75 | //只写 追加写入
76 | if (file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
77 | {
78 | file.write(qbArray);
79 | }
80 | file.close();
81 | return true;
82 | }
83 |
--------------------------------------------------------------------------------
/main/common/src/dtlog.cpp:
--------------------------------------------------------------------------------
1 | #include "dtlog.h"
2 |
3 | // static variables
4 | static DTLog *g_pLog = nullptr;
5 | static QFile g_logFile;
6 | static bool g_bLog = false;
7 | static QString g_qsLogPath = "";
8 |
9 | bool DTLog::isOpenLog = true;
10 |
11 | DTLog::DTLog() {}
12 |
13 | DTLog::~DTLog() { qDebug() << "~DTLog()"; }
14 |
15 | DTLog *DTLog::getLog() {
16 | if (g_pLog == NULL) {
17 | g_pLog = new DTLog;
18 | }
19 | return g_pLog;
20 | }
21 |
22 | void DTLog::setLoggerState(bool isOpen)
23 | {
24 | DTLog::isOpenLog = isOpen;
25 | }
26 |
27 | bool DTLog::createLogPath(const QString &qsSubPath, const QString &qsFileName) {
28 | QString qsDateTime = QDateTime::currentDateTime().toString("yyyyMMdd");
29 | g_qsLogPath = qApp->applicationDirPath();
30 | qDebug() << g_qsLogPath;
31 | if(qsSubPath == "")
32 | {
33 | g_qsLogPath.append("/Logs/");
34 | }
35 | else{
36 | g_qsLogPath.append("/"+qsSubPath);
37 | }
38 | QDir dir(g_qsLogPath);
39 | if (!dir.exists()) {
40 | if (!dir.mkpath(g_qsLogPath)) {
41 | qDebug() << "create file path fail:" << g_qsLogPath;
42 | return false;
43 | }
44 | } else {
45 | QStringList qlFilter("*.log");
46 | QStringList qlLogsList = dir.entryList(qlFilter);
47 | if (qlLogsList.size() >= MAX_LOGS_NUM) {
48 | QString qsRemoveLogFolder = dir.absolutePath();
49 | qsRemoveLogFolder.append("/").append(qlLogsList.at(0));
50 | if (!QFile::remove(qsRemoveLogFolder))
51 | qDebug() << "delete file err:" << qsRemoveLogFolder;
52 | }
53 | }
54 | g_qsLogPath =
55 | g_qsLogPath.append(DTLOG_PATH_FILENAME).arg(qsFileName).arg(qsDateTime);
56 | g_bLog = true;
57 | return true;
58 | }
59 |
60 | void DTLog::logMsg(QtMsgType type, const QString &qsMsg, bool isNeedDebug)
61 | {
62 | if (!DTLog::isOpenLog)
63 | {
64 | return;
65 | }
66 | if(isNeedDebug)
67 | {
68 | qDebug() << "[LOG_INFO]: " << qsMsg ;
69 | }
70 | static QMessageLogContext qlc;
71 | logMsg(type,qlc,qsMsg);
72 | }
73 |
74 | void DTLog::logFuncTime(const QString &functionName)
75 | {
76 | if (!DTLog::isOpenLog)
77 | {
78 | return;
79 | }
80 | QDateTime current_date_time =QDateTime::currentDateTime();
81 | QString qsCurrentDate =current_date_time.toString("yyyy.MM.dd.hh:mm:ss.zzz");
82 | QString qsMsg = QString("[LOG_PERFORMACE]%1 FINISHED AT TIME %2.").arg(functionName).arg(qsCurrentDate);
83 | qDebug() << qsMsg;
84 | static QMessageLogContext qlc;
85 | logMsg(QtMsgType::QtInfoMsg,qlc,qsMsg);
86 | }
87 |
88 | void DTLog::logMsg(QtMsgType type,const QMessageLogContext &context,const QString &qsMsg) {
89 | if (!DTLog::isOpenLog)
90 | {
91 | return;
92 | }
93 | Q_UNUSED(context);
94 | if (g_bLog == false)
95 | {
96 | return;
97 | }
98 | static QMutex mutex;
99 | mutex.lock();
100 | QString text;
101 | switch (type) {
102 | case QtDebugMsg:
103 | text = QString("[DEBUG]");
104 | break;
105 | case QtInfoMsg:
106 | text = QString("[INFO]");
107 | break;
108 |
109 | case QtWarningMsg:
110 | text = QString("[WARNING]");
111 | break;
112 |
113 | case QtCriticalMsg:
114 | text = QString("[CRITICAL]");
115 | break;
116 |
117 | case QtFatalMsg:
118 | text = QString("[FATAL]");
119 | default:
120 | break;
121 | }
122 |
123 | int index = qsMsg.lastIndexOf('\\');
124 | QString msgNew = qsMsg.right(qsMsg.length() - index - 1);
125 | static bool bfirstOpen = true;
126 | QIODevice::OpenMode openMode = QIODevice::ReadWrite | QIODevice::Text;
127 | {
128 | g_logFile.setFileName(g_qsLogPath);
129 | openMode |= QIODevice::Append;
130 | }
131 | bool bOpenSuccess = g_logFile.open(openMode);
132 | if (bOpenSuccess) {
133 | bfirstOpen = false;
134 | QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
135 | QString message = QString("%1 %2 %3").arg(current_date_time).arg(text).arg(msgNew);
136 | QTextStream txtOutput(&g_logFile);
137 | txtOutput << message << "\r\n";
138 | g_logFile.flush();
139 | g_logFile.close();
140 | }
141 | mutex.unlock();
142 | }
143 |
144 | void DTLog::functionStart(const QString &qsFunctionName)
145 | {
146 | //todo
147 | Q_UNUSED(qsFunctionName);
148 | }
149 |
150 |
151 |
152 | void DTLog::functionEnd(const QString &qsFunctionName)
153 | {
154 | //todo
155 | Q_UNUSED(qsFunctionName);
156 | }
157 |
--------------------------------------------------------------------------------
/main/common/src/dtregistry.cpp:
--------------------------------------------------------------------------------
1 | #include "dtregistry.h"
2 |
3 | //implement
4 |
5 | DTRegistry::DTRegistry()
6 | {
7 |
8 | }
9 |
10 | DTRegistry::~DTRegistry()
11 | {
12 |
13 | }
14 |
15 | DTRegistry& DTRegistry::getInstance() {
16 | static DTRegistry reg;
17 | return reg;
18 | }
19 |
20 | bool DTRegistry::setDefaultName(const QString &qsDefaultName) {
21 | m_qsDefaultName = qsDefaultName;
22 | return true;
23 | }
24 |
25 | bool DTRegistry::getValue(const QString &qsKey, QString &qsValue) {
26 | QSettings appSettings(m_qsDefaultName);
27 | QVariant qvValue = appSettings.value(qsKey,"");
28 | qsValue = qvValue.toString();
29 | return true;
30 | }
31 |
32 | bool DTRegistry::getValue(const QString &qsDefaultName, const QString &qsKey,
33 | QString &qsValue) {
34 | QSettings appSettings(qsDefaultName);
35 | QVariant qvValue = appSettings.value(qsKey,"");
36 | qsValue = qvValue.toString();
37 | return true;
38 | }
39 |
40 | bool DTRegistry::setValue(const QString &qsKey, const QString &qsValue) {
41 | QSettings appSettings(m_qsDefaultName);
42 | appSettings.setValue(qsKey,qsValue);
43 | return true;
44 | }
45 |
46 | bool DTRegistry::setValue(const QString &qsDefaultName, const QString &qsKey,
47 | const QString &qsValue) {
48 | QSettings appSettings(qsDefaultName);
49 | appSettings.setValue(qsKey,qsValue);
50 | // todo
51 | if (appSettings.value(qsKey,"None")!= qsValue)
52 | {
53 | return false;
54 | }
55 | return true;
56 | }
57 |
--------------------------------------------------------------------------------
/main/common/src/dttime.cpp:
--------------------------------------------------------------------------------
1 | #include "dttime.h"
2 |
3 |
4 | QString DTTime::getCurrentTimeStamp()
5 | {
6 | int nTimeStamp = QDateTime::currentDateTime().toTime_t();
7 | return QString::number(nTimeStamp);
8 | }
9 |
--------------------------------------------------------------------------------
/main/dtclient/.gitignore:
--------------------------------------------------------------------------------
1 | # This file is used to ignore files which are generated
2 | # ----------------------------------------------------------------------------
3 |
4 | *~
5 | *.autosave
6 | *.a
7 | *.core
8 | *.moc
9 | *.o
10 | *.obj
11 | *.orig
12 | *.rej
13 | *.so
14 | *.so.*
15 | *_pch.h.cpp
16 | *_resource.rc
17 | *.qm
18 | .#*
19 | *.*#
20 | core
21 | !core/
22 | tags
23 | .DS_Store
24 | .directory
25 | *.debug
26 | Makefile*
27 | *.prl
28 | *.app
29 | moc_*.cpp
30 | ui_*.h
31 | qrc_*.cpp
32 | Thumbs.db
33 | *.res
34 | *.rc
35 | /.qmake.cache
36 | /.qmake.stash
37 |
38 | # qtcreator generated files
39 | *.pro.user*
40 |
41 | # xemacs temporary files
42 | *.flc
43 |
44 | # Vim temporary files
45 | .*.swp
46 |
47 | # Visual Studio generated files
48 | *.ib_pdb_index
49 | *.idb
50 | *.ilk
51 | *.pdb
52 | *.sln
53 | *.suo
54 | *.vcproj
55 | *vcproj.*.*.user
56 | *.ncb
57 | *.sdf
58 | *.opensdf
59 | *.vcxproj
60 | *vcxproj.*
61 |
62 | # MinGW generated files
63 | *.Debug
64 | *.Release
65 |
66 | # Python byte code
67 | *.pyc
68 |
69 | # Binaries
70 | # --------
71 | *.dll
72 | *.exe
73 |
74 |
--------------------------------------------------------------------------------
/main/dtclient/dtclient.pro:
--------------------------------------------------------------------------------
1 | include (../main.pri)
2 | QT += core gui network
3 |
4 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
5 |
6 | CONFIG += c++14
7 |
8 | # 添加预编译头文件
9 | CONFIG += PRECOMPILED_HEADER
10 | PRECOMPILED_HEADER = $$PWD/include/stdafx.h
11 |
12 | # The following define makes your compiler emit warnings if you use
13 | # any Qt feature that has been marked deprecated (the exact warnings
14 | # depend on your compiler). Please consult the documentation of the
15 | # deprecated API in order to know how to port your code away from it.
16 | DEFINES += QT_DEPRECATED_WARNINGS
17 |
18 | # You can also make your code fail to compile if it uses deprecated APIs.
19 | # In order to do so, uncomment the following line.
20 | # You can also select to disable deprecated APIs only up to a certain version of Qt.
21 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
22 |
23 | SOURCES += \
24 | src/component/playwidget.cpp \
25 | src/main.cpp \
26 | src/mainwindow.cpp \
27 | src/pluginsmanager.cpp \
28 | src/util.cpp
29 |
30 | HEADERS += \
31 | include/component/playslider.h \
32 | include/component/playwidget.h \
33 | include/util.h \
34 | include/win/dumper.h \
35 | include/globaldefine.h \
36 | include/mainwindow.h \
37 | include/pluginsmanager.h \
38 | include/stdafx.h \
39 | ../../global/define.h \
40 |
41 | FORMS += \
42 | ui/about.ui \
43 | ui/mainwindow.ui
44 |
45 | INCLUDEPATH += \
46 | include \
47 | src \
48 |
49 | # 生成目录设置
50 | DESTDIR = $$PWD/../../bin/
51 |
52 | win32::LIBS += -L../../bin \
53 | -lcommon \
54 |
55 | win32::LIBS += -L../../bin \
56 | -ldtui \
57 |
58 | # 拷贝文件function
59 | defineTest(copyToDestDir) {
60 | files = $$1
61 | dir = $$2
62 | # replace slashes in destination path for Windows
63 | win32:dir ~= s,/,\\,g
64 |
65 | for(file, files) {
66 | # replace slashes in source path for Windows
67 | win32:file ~= s,/,\\,g
68 |
69 | QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$shell_quote($$file) $$shell_quote($$dir) $$escape_expand(\\n\\t)
70 | }
71 | export(QMAKE_POST_LINK)
72 | }
73 |
74 | # 拷贝文件 plugin.json拷贝到安装的目录
75 | PLUGIN_INFO_FILES += \
76 | $$PWD/../../allplugins/plugins.json
77 |
78 |
79 | copyToDestDir($$PLUGIN_INFO_FILES, $$PWD/../../bin/plugins/)
80 |
81 | # 复制编译打包的相关依赖
82 | DEPEND_CORE_FILES += \
83 | ##-----windows环境相关的------
84 | $$PWD/../../depends/msvcp140.dll \
85 | $$PWD/../../depends/ucrtbase.dll \
86 | $$PWD/../../depends/vcruntime140.dll \
87 | ##------------Qt相关的-----------
88 | $$PWD/../../depends/Qt5Network.dll \
89 |
90 | copyToDestDir($$DEPEND_CORE_FILES, $$PWD/../../bin)
91 |
92 |
93 | # Default rules for deployment.
94 | qnx: target.path = /tmp/$${TARGET}/bin
95 | else: unix:!android: target.path = /opt/$${TARGET}/bin
96 | !isEmpty(target.path): INSTALLS += target
97 |
98 | RESOURCES += \
99 | dtclient.qrc
100 | RC_ICONS = resources/icon.ico
101 |
--------------------------------------------------------------------------------
/main/dtclient/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/icon.ico
--------------------------------------------------------------------------------
/main/dtclient/include/component/playslider.h:
--------------------------------------------------------------------------------
1 | #ifndef PLAYSLIDER_H
2 | #define PLAYSLIDER_H
3 |
4 | /**
5 | * 进度条窗体
6 | */
7 | class PlaySlider: public QWidget{
8 | Q_OBJECT
9 | public:
10 |
11 | private:
12 | void initControls();
13 |
14 | private:
15 | QSlider * m_pSlider; // 滑动条
16 | QLineEdit* m_pLineEdit; // 编辑框
17 | QLabel* m_pProgressLabel; // 进度页面
18 | };
19 |
20 | #endif // PLAYSLIDER_H
21 |
--------------------------------------------------------------------------------
/main/dtclient/include/component/playwidget.h:
--------------------------------------------------------------------------------
1 | #ifndef PLAYWIDGET_H
2 | #define PLAYWIDGET_H
3 | #include
4 |
5 | /**
6 | * @brief: 播放器组件
7 | */
8 | class PlayWidget: public QWidget {
9 | Q_OBJECT
10 | public:
11 | explicit PlayWidget(QWidget* parent = nullptr);
12 | ~PlayWidget();
13 |
14 | void addPlayButton(QWidget* playBtn);
15 |
16 | private:
17 | QWidget * m_pParentWidget;
18 | QHBoxLayout * m_pMainLayout;
19 | };
20 |
21 | #endif // PLAYWIDGET_H
22 |
--------------------------------------------------------------------------------
/main/dtclient/include/globaldefine.h:
--------------------------------------------------------------------------------
1 | #ifndef GLOBALDEFINE_H
2 | #define GLOBALDEFINE_H
3 |
4 | /**
5 | * @brief: 相关配置信息
6 | * 包含了生成文件名称等
7 | */
8 |
9 | #define ORGANIZATION_NAME "OGEARTH " // 注册表相关信息
10 | #define APP_NAME "控制台" // 软件名称
11 | #define APP_VERSION "0.0.1" // 软件版本
12 |
13 | #endif // GLOBALDEFINE_H
14 |
--------------------------------------------------------------------------------
/main/dtclient/include/mainwindow.h:
--------------------------------------------------------------------------------
1 | #ifndef MAINWINDOW_H
2 | #define MAINWINDOW_H
3 |
4 | #include "../../dtui/include/dttabwidget.h"
5 | #include "../../dtui/include/dttitlebar.h"
6 | #include "../../dtui/include/dttoolbar.h"
7 | #include "../../dtui/include/dtgroupbox.h"
8 | #include "../../dtui/include/dttabwidget.h"
9 | #include "globaldefine.h"
10 | #include "pluginsmanager.h"
11 | #include "component/playwidget.h"
12 |
13 |
14 | QT_BEGIN_NAMESPACE
15 | namespace Ui {
16 | class MainWindow;
17 | }
18 | QT_END_NAMESPACE
19 |
20 | class MainWindow : public QMainWindow {
21 | Q_OBJECT
22 |
23 | public:
24 | MainWindow(QWidget *parent = nullptr);
25 | ~MainWindow();
26 |
27 | private:
28 |
29 | /**
30 | * @brief: 程序初始化
31 | * UI初始化
32 | */
33 | void init();
34 |
35 | void loadStyle();
36 |
37 | // 注册自定义的数据类型
38 | void registerMetaTypes();
39 |
40 | /**
41 | * @brief: 插件加载
42 | * 1. 加载All Plugins
43 | * 2. RegisterSignal
44 | * 3. Invoke LoadUi
45 | */
46 | void loadPlugins();
47 |
48 |
49 | signals:
50 |
51 | /**
52 | * @brief: 同步调用
53 | */
54 | void sendSignalToPlugins(PluginMetaData);
55 |
56 | /**
57 | * @brief: 异步调用
58 | */
59 | void sendSignalToPluginsAsync(PluginMetaData);
60 |
61 | private slots:
62 | void showGroupBox();
63 |
64 | public slots:
65 |
66 | // 插件通信部分
67 | QVariant slotSendMessage(const PluginMetaData&);
68 | void slotEventFromPlugins(const PluginMetaData& plt);
69 | void slotEventFromPluginsAsync(const PluginMetaData&);
70 |
71 | // 加载对应的样式表
72 | void loadStyleSheet(const QString& qsStyleFile);
73 |
74 | // 最大化、最小化、关闭事件
75 | void slotCloseEvent();
76 | void slotMinEvent();
77 | void slotMaxEvent();
78 |
79 | // override
80 | void mouseMoveEvent(QMouseEvent *event) override;
81 | void mousePressEvent(QMouseEvent *event) override;
82 | void mouseReleaseEvent(QMouseEvent *event) override;
83 | void mouseDoubleClickEvent(QMouseEvent *event) override;
84 | void resizeEvent(QResizeEvent *event) override;
85 |
86 |
87 | #ifdef Q_OS_WIN
88 | protected:
89 | /********* 重绘界面框,可以实现拖动【基于Windows平台适配】 *********/
90 | bool nativeEvent(const QByteArray &eventType, void *message,
91 | long *result) override;
92 | #endif
93 |
94 |
95 | private:
96 | Ui::MainWindow *ui;
97 |
98 | // 插件管理
99 | QSharedPointer m_dtPluginsManager; // 插件管理
100 |
101 | // 界面相关
102 | QSharedPointer m_pMainWidget; // 主窗体
103 | QSharedPointer m_pTitleBar; // 标题栏控件
104 | QSharedPointer m_pMainLayout; // 总体布局VBox布局
105 |
106 | // 测试功能按钮 SET_FALSE 即可
107 | DTButton* m_pTestGroupBoxBtn; // 测试GroupBox功能
108 | DTGroupBox * m_pTestBox = nullptr;
109 | DTTabWidget* m_pTabWidget; // tab栏工具条
110 | PlayWidget* m_pPlayWidget;
111 |
112 |
113 |
114 | // FrameLess Window Need
115 | QPoint m_PointMouse;
116 | int m_nDesktopWidth = 0; // The Default Normal Width
117 | bool m_bShowMax = false; // The State Show whether is Max State
118 | int m_nDefaultTitleBarHeight = 98;
119 | };
120 | #endif // MAINWINDOW_H
121 |
--------------------------------------------------------------------------------
/main/dtclient/include/pluginsmanager.h:
--------------------------------------------------------------------------------
1 | #ifndef PLUGINSMANAGER_H
2 | #define PLUGINSMANAGER_H
3 |
4 | #define PluginManager DT_PluginsManager::GetInstance()
5 |
6 | // 插件状态【分两种,一种是动态加载:即启动后不立即加载的,一种是直接加载:软件一启动默认加载】
7 | enum E_PLUGIN_STATE {
8 | PLUGIN_DIRECT = 0, // 直接加载
9 | PLUGIN_DYNAMIC, //动态加载
10 | };
11 |
12 | // 定义插件基本信息
13 | struct PluginsInfo {
14 | QString qsPluginsName; // 插件名称
15 | QString qsPluginsVersion; //插件版本
16 | QString qsPluginsDesc; //插件描述
17 | E_PLUGIN_STATE ePluginState; //插件状态
18 | };
19 |
20 |
21 | /**
22 | * @brief: 插件管理器
23 | * 主要是用来管理已经加载的插件,以及在程序运行结束后释放插件,这个就是组件化代码的核心
24 | * 通过读取 plugins/plugins.json 的文件列表 进行加载插件
25 | */
26 | class DT_PluginsManager : public QObject {
27 | Q_OBJECT
28 | typedef QVector VEC_PLUGININFO;
29 |
30 | public:
31 | DT_PluginsManager(QObject *parent = nullptr);
32 | static DT_PluginsManager &GetInstance() {
33 | static DT_PluginsManager instance;
34 | return instance;
35 | }
36 |
37 | ~DT_PluginsManager();
38 |
39 | /**
40 | * @brief: 加载插件
41 | */
42 | static bool loadPlugin(const QString &dllPath, bool bFreeWhenFailed);
43 |
44 | /**
45 | * @brief: 释放指定的插件
46 | */
47 | static void freePlugin(const QString &dllPath);
48 |
49 | /**
50 | * @brief: 加载所有插件
51 | */
52 | void loadPlugins();
53 |
54 | /**
55 | * @brief: 释放插件列表
56 | */
57 | void freePlugins();
58 |
59 | /**
60 | * @brief: 注册插件的信号和槽
61 | */
62 | void registerEventCallBacks();
63 |
64 | /**
65 | * @brief: 加载插件内部的UI方法
66 | */
67 | void loadPluginUi(QObject *);
68 |
69 | /**
70 | * @brief: 获取以及加载成功的插件列表
71 | */
72 | const QVector& getLoadedObject()
73 | {
74 | return m_vecLoadSuccessObjects;
75 | }
76 |
77 | /*\
78 | * 移除指定的插件
79 | */
80 | bool removePluginObject(const QString& qsPluginName)
81 | {
82 | //TODO
83 | return true;
84 | }
85 |
86 | signals:
87 | /**
88 | * 加载UI事件信号
89 | */
90 | void sendSignalUI(QObject *);
91 |
92 | private:
93 | VEC_PLUGININFO m_vecLoadedPluginInfo; // 已经加载成功的dll列表
94 | VEC_PLUGININFO m_vecFailedPluginInfo; // 加载失败的dll列表
95 | VEC_PLUGININFO m_vecPluginInfo; // 需要加载的dll列表
96 | VEC_PLUGININFO m_vecDynamicPluginInfo; // 动态加载的dll
97 | QObject *m_parent; // 窗口句柄
98 | QVector m_vecLoadSuccessObjects; // 获取已经加载的列表
99 | };
100 |
101 | #endif // PLUGINSMANAGER_H
102 |
--------------------------------------------------------------------------------
/main/dtclient/include/stdafx.h:
--------------------------------------------------------------------------------
1 | #ifndef STDAFX_H
2 | #define STDAFX_H
3 |
4 | // C++自带
5 | #include
6 |
7 | // QT 相关的头文件库
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 | #include
15 | #include
16 | #include
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 |
33 | // Others
34 | #include "../../global/define.h"
35 |
36 | // 处理中文乱码使用
37 | #if defined(_MSC_VER) && (_MSC_VER >= 1600)
38 | # pragma execution_character_set("utf-8")
39 | #endif
40 |
41 |
42 |
43 | #endif // STDAFX_H
44 |
--------------------------------------------------------------------------------
/main/dtclient/include/stdafx.h.cpp:
--------------------------------------------------------------------------------
1 | /*--------------------------------------------------------------------
2 | * Precompiled header source file used by Visual Studio.NET to generate
3 | * the .pch file.
4 | *
5 | * Due to issues with the dependencies checker within the IDE, it
6 | * sometimes fails to recompile the PCH file, if we force the IDE to
7 | * create the PCH file directly from the header file.
8 | *
9 | * This file is auto-generated by qmake since no PRECOMPILED_SOURCE was
10 | * specified, and is used as the common stdafx.cpp. The file is only
11 | * generated when creating .vcxproj project files, and is not used for
12 | * command line compilations by nmake.
13 | *
14 | * WARNING: All changes made in this file will be lost.
15 | --------------------------------------------------------------------*/
16 | #include "stdafx.h"
17 |
--------------------------------------------------------------------------------
/main/dtclient/include/util.h:
--------------------------------------------------------------------------------
1 | #ifndef UTIL_H
2 | #define UTIL_H
3 |
4 | class Util {
5 | public:
6 | /**
7 | * @brief: 处理命令行
8 | */
9 | static void processCmd(int argc, char *argv[]);
10 | /**
11 | * @brief: 设置编码格式
12 | */
13 | static void setDefaultCodec(QString qsFormat="utf-8");
14 | };
15 |
16 | #endif // UTIL_H
17 |
--------------------------------------------------------------------------------
/main/dtclient/include/win/dumper.h:
--------------------------------------------------------------------------------
1 | #ifndef DUMPER_H
2 | #define DUMPER_H
3 |
4 | /*** dump文件生成【针对于WIN】 **/
5 |
6 | #ifdef Q_OS_WIN
7 |
8 | #pragma once
9 | #include
10 | #include
11 | #include
12 | #pragma comment(lib, "user32.lib")
13 |
14 | int GenerateMiniDump(PEXCEPTION_POINTERS pExceptionPointers)
15 | {
16 | typedef BOOL(WINAPI * MiniDumpWriteDumpT)(
17 | HANDLE,
18 | DWORD,
19 | HANDLE,
20 | MINIDUMP_TYPE,
21 | PMINIDUMP_EXCEPTION_INFORMATION,
22 | PMINIDUMP_USER_STREAM_INFORMATION,
23 | PMINIDUMP_CALLBACK_INFORMATION
24 | );
25 | MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL;
26 | HMODULE hDbgHelp = LoadLibrary(_T("DbgHelp.dll"));
27 | if (NULL == hDbgHelp)
28 | {
29 | return EXCEPTION_CONTINUE_EXECUTION;
30 | }
31 | pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
32 |
33 | if (NULL == pfnMiniDumpWriteDump)
34 | {
35 | FreeLibrary(hDbgHelp);
36 | return EXCEPTION_CONTINUE_EXECUTION;
37 | }
38 | TCHAR szFileName[MAX_PATH] = { 0 };
39 | TCHAR szVersion[] = L"DumpFile";
40 | SYSTEMTIME stLocalTime;
41 | GetLocalTime(&stLocalTime);
42 | wsprintf(szFileName, L"%s-%04d%02d%02d-%02d%02d%02d.dmp",
43 | szVersion, stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
44 | stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond);
45 | HANDLE hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE,
46 | FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);
47 | if (INVALID_HANDLE_VALUE == hDumpFile)
48 | {
49 | FreeLibrary(hDbgHelp);
50 | return EXCEPTION_CONTINUE_EXECUTION;
51 | }
52 |
53 | MINIDUMP_EXCEPTION_INFORMATION expParam;
54 | expParam.ThreadId = GetCurrentThreadId();
55 | expParam.ExceptionPointers = pExceptionPointers;
56 | expParam.ClientPointers = FALSE;
57 | pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
58 | hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &expParam : NULL), NULL, NULL);
59 | CloseHandle(hDumpFile);
60 | FreeLibrary(hDbgHelp);
61 | return EXCEPTION_EXECUTE_HANDLER;
62 | }
63 |
64 | LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo)
65 | {
66 | if (IsDebuggerPresent()) {
67 | return EXCEPTION_CONTINUE_SEARCH;
68 | }
69 | return GenerateMiniDump(lpExceptionInfo);
70 | }
71 |
72 |
73 | #endif
74 | #endif // DUMPER_H
75 |
--------------------------------------------------------------------------------
/main/dtclient/resources/background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/background.jpg
--------------------------------------------------------------------------------
/main/dtclient/resources/css/common.css:
--------------------------------------------------------------------------------
1 | QWidget#MainWindow
2 | {
3 | border-image: url(:/resources/background.jpg) 2;
4 | border-width: 2px;
5 | }
6 |
7 | /***************************************通用界面样式********************************************/
8 | /*
9 | * QLabel:样式
10 | */
11 | QLabel#title_info{
12 | background-color: white;
13 | color: black;
14 | margin-left: 30px;
15 | }
16 |
17 | /*
18 | * PushButton: 样式
19 | */
20 | QPushButton {
21 | color: white;
22 | border-radius: 4px;
23 | background-color: #533a93;
24 | font-weight: bold;
25 | font-size: 14px;
26 | }
27 |
28 | QPushButton:hover {
29 | background-color: #5f479b;
30 | }
31 |
32 | QPushButton:pressed {
33 | background-color: #654e9f;
34 | }
35 |
36 | /*************/
37 | QPushButton#play_ui {
38 | background-color: aqua;
39 | }
40 | /*
41 | * GroupBox: 样式
42 | */
43 | DTGroupBox {
44 | background-color:transparent;
45 | border-image: url(:/resources/images/QGroupBox/window_left_open.png)0 0 0 0;
46 | border-width: 0 0 0 0;
47 | min-width:10;
48 | }
49 |
50 | QWidget#window_tab_widget {
51 | background-color:transparent;
52 | }
53 |
54 | QToolButton {
55 | color: rgb(202, 252, 255);
56 | border-radius: 4px;
57 | background-color:transparent;
58 | font-weight: bold;
59 | font-size: 14px;
60 | border-image: url(:/resources/images/QPushButton/legend_bg_nor.png)0 0 0 0;
61 | border-width: 0 0 0 0;
62 | }
63 |
64 | QToolButton:hover {
65 | border-image: url(:/resources/images/QPushButton/legend_bg_hover.png)0 0 0 0;
66 | border-width: 0 0 0 0;
67 | }
68 |
69 | QToolButton:pressed {
70 | border-image: url(:/resources/images/QPushButton/legend_pressed.png)0 0 0 0;
71 | border-width: 0 0 0 0;
72 | }
73 |
74 |
75 | /***************************************专用界面样式********************************************/
76 |
77 | /* 标题栏 */
78 | QWidget#window_title_bar
79 | {
80 | color: rgb(155, 243, 247);
81 | font: 22px;
82 | }
83 |
84 | QWidget#window_title_widget
85 | {
86 | border-image: url(:/resources/images/QMainWindow/title.png)0 274 0 274;
87 | border-width: 0 274 0 274;
88 | }
89 |
90 | /*标题*/
91 | QLabel#win_title
92 | {
93 | color: rgb(155, 243, 247);
94 | font: 22px;
95 | }
96 |
97 | /*区域*/
98 | QLabel#win_region
99 | {
100 | color: rgb(247, 192, 187);
101 | font: 12px;
102 | }
103 |
104 | /*标题控件*/
105 | QLabel#win_control_title
106 | {
107 | color: rgb(252, 159, 118);
108 | }
109 |
110 |
111 | /* 关闭按钮 3种状态 */
112 | QPushButton#window_close{
113 | background-color: transparent;
114 | border-image: url(:/resources/images/QPushButton/window_close_nor.png);
115 | }
116 |
117 | QPushButton#window_close:hover{
118 | border-image: url(:/resources/images/QPushButton/window_close_hover.png);
119 | }
120 |
121 | QPushButton#window_close:pressed{
122 | border-image: url(:/resources/images/QPushButton/window_close_pressed.png);
123 | }
124 |
125 | QPushButton#window_nor_close{
126 | background-color: transparent;
127 | border-image: url(:/resources/images/QPushButton/close_nor.png);
128 | }
129 |
130 | QPushButton#window_nor_close:hover{
131 | border-image: url(:/resources/images/QPushButton/close_hover.png);
132 | }
133 |
134 | QPushButton#window_nor_close:pressed{
135 | border-image: url(:/resources/images/QPushButton/close_pressed.png);
136 | }
137 |
138 |
139 | DTButton#dt_info {
140 | color: rgb(202, 252, 255);
141 | border-radius: 4px;
142 | background-color:transparent;
143 | font-weight: bold;
144 | font-size: 14px;
145 | min-height: 40px;
146 | border-image: url(:/resources/images/QPushButton/legend_bg_nor.png)0 0 0 0;
147 | border-width: 0 0 0 0;
148 | }
149 |
150 | QToolButton:hover#dt_info {
151 | border-image: url(:/resources/images/QPushButton/legend_bg_hover.png)0 0 0 0;
152 | border-width: 0 0 0 0;
153 | }
154 |
155 | QToolButton:pressed#dt_info {
156 | border-image: url(:/resources/images/QPushButton/legend_pressed.png)0 0 0 0;
157 | border-width: 0 0 0 0;
158 | }
159 |
--------------------------------------------------------------------------------
/main/dtclient/resources/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/icon.ico
--------------------------------------------------------------------------------
/main/dtclient/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/icon.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/First class unit_bg_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/First class unit_bg_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/First class unit_bg_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/First class unit_bg_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/First class_hover弹窗_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/First class_hover弹窗_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Instruction information_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Instruction information_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Three level unit_bg_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Three level unit_bg_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Three level unit_bg_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Three level unit_bg_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Three level unit_hover弹窗_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Three level unit_hover弹窗_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Two level unit_bg_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Two level unit_bg_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Two level unit_bg_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Two level unit_bg_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Two level unit_hover弹窗_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Two level unit_hover弹窗_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/Uncommunicated_uncommunicated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/Uncommunicated_uncommunicated.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/arrow_before.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/arrow_before.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/arrow_rear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/arrow_rear.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/change parameters_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/change parameters_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/default unit_bg_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/default unit_bg_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/default unit_bg_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/default unit_bg_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/information_type four.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/information_type four.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/information_type one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/information_type one.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/information_type three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/information_type three.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/information_type two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/information_type two.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type eight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type eight.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type five.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type four.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type four.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type one.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type seven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type seven.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type six.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type six.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type three.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/Others/type two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/Others/type two.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/checked_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/checked_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/checked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/checked_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/checked_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/checked_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/checked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/checked_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/indeteminate_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/indeteminate_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/indeteminate_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/indeteminate_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/indeteminate_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/indeteminate_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/indeteminate_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/indeteminate_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/unchecked_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/unchecked_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/unchecked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/unchecked_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/unchecked_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/unchecked_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QCheckBox/unchecked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QCheckBox/unchecked_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/disable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/disable.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/editable_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/editable_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/editable_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/editable_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/editable_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/editable_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/list_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/list_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/list_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/list_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/list_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/list_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/list_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/list_selected.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/upArrow_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/upArrow_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/upArrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/upArrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/upArrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/upArrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QComboBox/upArrow_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QComboBox/upArrow_selected.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QDialog/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QDialog/bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QDialog/cancel_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QDialog/cancel_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QDialog/cancel_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QDialog/cancel_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QDialog/cancel_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QDialog/cancel_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QDialog/determine_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QDialog/determine_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QDialog/determine_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QDialog/determine_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QDialog/determine_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QDialog/determine_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QFrame/hline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QFrame/hline.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QFrame/vline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QFrame/vline.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QGroupBox/window_left_central.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QGroupBox/window_left_central.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QGroupBox/window_left_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QGroupBox/window_left_header.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QGroupBox/window_left_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QGroupBox/window_left_open.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QGroupBox/window_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QGroupBox/window_right.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/h_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/h_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/h_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/h_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/h_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/h_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/h_secelecd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/h_secelecd.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/v_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/v_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/v_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/v_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/v_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/v_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QHeaderView/v_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QHeaderView/v_selected.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QLineEdit/hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QLineEdit/hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QLineEdit/nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QLineEdit/nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QLineEdit/pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QLineEdit/pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QListView/add_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QListView/add_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QListView/add_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QListView/add_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QListView/add_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QListView/add_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QListView/header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QListView/header.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QListView/list_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QListView/list_checked.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMainWindow/button .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMainWindow/button .png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMainWindow/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMainWindow/title.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenu/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenu/bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenu/hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenu/hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenu/pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenu/pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/Instruction access_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/Instruction access_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/Instruction access_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/Instruction access_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/arrow_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/arrow_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/arrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/arrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/arrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/arrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/collaborative group_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/collaborative group_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/collaborative group_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/collaborative group_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/command link_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/command link_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/command link_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/command link_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/down_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/down_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/down_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/down_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/down_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/down_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/map tools_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/map tools_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/map tools_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/map tools_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/menubar_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/menubar_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/menubar_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/menubar_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/menubar_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/menubar_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/system settings_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/system settings_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/system settings_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/system settings_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/up_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/up_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/up_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/up_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QMenuBar/up_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QMenuBar/up_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QProgressBar/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QProgressBar/bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QProgressBar/progress_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QProgressBar/progress_bar.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2D_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2D_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2D_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2D_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2D_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2D_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2D_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2D_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2_3D_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2_3D_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2_3D_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2_3D_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2_3D_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2_3D_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/2_3D_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/2_3D_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/3D_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/3D_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/3D_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/3D_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/3D_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/3D_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/3D_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/3D_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/arrow_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/arrow_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/arrow_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/arrow_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/arrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/arrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/arrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/arrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/close_hover .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/close_hover .png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/close_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/close_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/close_nor .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/close_nor .png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/close_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/close_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/close_pressed .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/close_pressed .png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/close_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/close_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/determine_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/determine_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/determine_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/determine_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/determine_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/determine_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/eliminate_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/eliminate_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/eliminate_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/eliminate_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/eliminate_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/eliminate_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/legend_bg_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/legend_bg_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/legend_bg_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/legend_bg_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/legend_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/legend_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/menu expansion_botton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/menu expansion_botton.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/menu expansion_hover_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/menu expansion_hover_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/menu expansion_pressed_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/menu expansion_pressed_bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/menu_bottom_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/menu_bottom_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/menu_bottom_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/menu_bottom_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/menu_bottom_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/menu_bottom_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/modify_nor .png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/modify_nor .png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/modify_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/modify_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/reduction_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/reduction_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/reduction_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/reduction_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/reduction_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/reduction_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/reduction_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/reduction_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/scale_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/scale_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/scale_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/scale_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/scale_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/scale_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/window_close_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/window_close_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/window_close_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/window_close_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QPushButton/window_close_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QPushButton/window_close_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/checked_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/checked_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/checked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/checked_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/checked_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/checked_normal.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/checked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/checked_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/unchecked_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/unchecked_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/unchecked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/unchecked_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/unchecked_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/unchecked_normal.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QRadioButton/unchecked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QRadioButton/unchecked_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/downarrow_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/downarrow_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/downarrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/downarrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/downarrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/downarrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/groove_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/groove_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/hGroove_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/hGroove_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/hHandle_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/hHandle_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/hHandle_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/hHandle_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/hHandle_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/hHandle_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/handle_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/handle_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/handle_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/handle_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/handle_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/handle_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/leftarrow_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/leftarrow_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/leftarrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/leftarrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/leftarrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/leftarrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/rightarrow_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/rightarrow_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/rightarrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/rightarrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/rightarrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/rightarrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/uparrow_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/uparrow_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/uparrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/uparrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QScrollBar/uparrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QScrollBar/uparrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSizeGrip/SizeGrip_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSizeGrip/SizeGrip_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSizeGrip/SizeGrip_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSizeGrip/SizeGrip_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSizeGrip/nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSizeGrip/nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/h_slider_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/h_slider_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/h_slider_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/h_slider_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/h_slider_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/h_slider_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/h_slider_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/h_slider_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/vslider_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/vslider_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/vslider_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/vslider_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/vslider_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/vslider_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSlider/vslider_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSlider/vslider_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/arrow_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/arrow_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/arrow_hover-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/arrow_hover-01.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/arrow_hover-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/arrow_hover-02.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/arrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/arrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/arrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/arrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/disable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/disable.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/downarrow_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/downarrow_disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/downarrow_hover-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/downarrow_hover-01.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/downarrow_hover-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/downarrow_hover-02.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/downarrow_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/downarrow_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/downarrow_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/downarrow_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/editable_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/editable_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/editable_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/editable_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/editable_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/editable_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/uneditable_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/uneditable_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/uneditable_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/uneditable_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QSpinBox/uneditable_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QSpinBox/uneditable_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTabBar/disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTabBar/disabled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTabBar/hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTabBar/hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTabBar/nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTabBar/nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTabBar/pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTabBar/pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTabBar/seled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTabBar/seled.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/form_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/form_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/form_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/form_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/form_selecyed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/form_selecyed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/hline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/hline.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/sidebar_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/sidebar_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/sidebar_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/sidebar_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/sidebar_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/sidebar_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/sidebar_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/sidebar_selected.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/title_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/title_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/title_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/title_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/title_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/title_pressed.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/title_secelecd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/title_secelecd.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTableView/vline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTableView/vline.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/bg.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_bg_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_bg_hover.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_bg_nor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_bg_nor.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_bg_pass on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_bg_pass on.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_close.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_end.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_end.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_more.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_open.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/branch_vline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/branch_vline.png
--------------------------------------------------------------------------------
/main/dtclient/resources/images/QTreeView/header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/images/QTreeView/header.png
--------------------------------------------------------------------------------
/main/dtclient/resources/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/pause.png
--------------------------------------------------------------------------------
/main/dtclient/resources/quick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/quick.png
--------------------------------------------------------------------------------
/main/dtclient/resources/restart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/restart.png
--------------------------------------------------------------------------------
/main/dtclient/resources/stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtclient/resources/stop.png
--------------------------------------------------------------------------------
/main/dtclient/src/component/playwidget.cpp:
--------------------------------------------------------------------------------
1 | #include "component/playwidget.h"
2 |
3 | PlayWidget::PlayWidget(QWidget* pWidget)
4 | {
5 | m_pParentWidget = pWidget;
6 | m_pMainLayout = new QHBoxLayout();
7 | setLayout(m_pMainLayout);
8 | }
9 |
10 | PlayWidget::~PlayWidget(){
11 | qDebug() << "Play Widget Delete..." << endl;
12 | }
13 |
14 | void PlayWidget::addPlayButton(QWidget *playBtn)
15 | {
16 | m_pMainLayout->addWidget(playBtn);
17 | }
18 |
--------------------------------------------------------------------------------
/main/dtclient/src/main.cpp:
--------------------------------------------------------------------------------
1 | #include "mainwindow.h"
2 | #include "globaldefine.h"
3 | #include "../../common/include/dtlog.h"
4 | #include "../../common/include/dtregistry.h"
5 | #include "../include/util.h"
6 | #include "win/dumper.h"
7 |
8 | int main(int argc, char *argv[])
9 | {
10 |
11 | #ifdef Q_OS_WIN
12 | #ifdef DUMP_GENERATE
13 | SetUnhandledExceptionFilter(ExceptionFilter);
14 | #endif
15 | #endif
16 | // 注册需要通信的数据类型
17 | qRegisterMetaType("PluginMetaData");
18 |
19 | // 设置默认编码格式
20 | Util::setDefaultCodec();
21 |
22 | // 处理命令行
23 | Util::processCmd(argc,argv);
24 |
25 | // 设置程序的基本信息
26 | QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
27 | QCoreApplication::setApplicationName(APP_NAME);
28 |
29 | /**
30 | * @brief: 初始化相关操作
31 | */
32 | QApplication app(argc, argv);
33 |
34 | // 日志初始化
35 | if(Logger->createLogPath("",APP_NAME))
36 | {
37 | qInstallMessageHandler(DTLog::logMsg);
38 | }
39 |
40 | // 资源初始化
41 | Q_INIT_RESOURCE(dtclient);
42 |
43 | // 启动主窗体
44 | MainWindow w;
45 | // w.setWindowTitle(APP_NAME);
46 | return app.exec();
47 | }
48 |
--------------------------------------------------------------------------------
/main/dtclient/src/util.cpp:
--------------------------------------------------------------------------------
1 | #include "../include/util.h"
2 | #ifdef Q_OS_WIN
3 | #include
4 | #endif
5 |
6 | void Util::processCmd(int argc, char *argv[])
7 | {
8 | // 处理命令行参数
9 | QString qsCmd="";
10 | for(int a = 0; a < argc; ++a)
11 | {
12 | qsCmd += QByteArray(argv[a], -1);
13 | if(a < argc-1)
14 | qsCmd += ";";
15 | }
16 |
17 | if(qsCmd.contains("debug"))
18 | {
19 | // 开启调试模式
20 | #ifdef Q_OS_WIN
21 | AllocConsole();
22 | freopen("CONOUT$","w",stdout);
23 | #endif
24 | }
25 | }
26 |
27 | void Util::setDefaultCodec(QString qsFormat)
28 | {
29 | #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
30 | #if _MSC_VER
31 | QTextCodec *codec = QTextCodec::codecForName("gbk");
32 | #else
33 | QTextCodec *codec = QTextCodec::codecForName("utf-8");
34 | #endif
35 | QTextCodec::setCodecForLocale(codec);
36 | QTextCodec::setCodecForCStrings(codec);
37 | QTextCodec::setCodecForTr(codec);
38 | #else
39 | QTextCodec *codec = QTextCodec::codecForName(qsFormat.toStdString().c_str());
40 | QTextCodec::setCodecForLocale(codec);
41 | #endif
42 | }
43 |
--------------------------------------------------------------------------------
/main/dtclient/ui/about.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Dialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 460
10 | 300
11 |
12 |
13 |
14 | Dialog
15 |
16 |
17 |
18 |
19 | 50
20 | 70
21 | 381
22 | 201
23 |
24 |
25 |
26 | -
27 |
28 |
29 | ...
30 |
31 |
32 |
33 | -
34 |
35 |
36 | PushButton
37 |
38 |
39 |
40 | -
41 |
42 |
43 | -
44 |
45 |
46 | Qt::Horizontal
47 |
48 |
49 |
50 | 40
51 | 20
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | 50
62 | 20
63 | 160
64 | 80
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | 290
73 | 20
74 | 3
75 | 61
76 |
77 |
78 |
79 | Qt::Vertical
80 |
81 |
82 |
83 |
84 |
85 | 280
86 | 20
87 | 160
88 | 22
89 |
90 |
91 |
92 | Qt::Horizontal
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/main/dtclient/ui/mainwindow.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 827
10 | 700
11 |
12 |
13 |
14 |
15 | 700
16 | 700
17 |
18 |
19 |
20 | MainWindow
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/main/dtui/draws/README.md:
--------------------------------------------------------------------------------
1 | #### 说明
2 |
3 | ---
4 |
5 | * 该模块主要为图像绘制的模块,包含绘图等基本功能
--------------------------------------------------------------------------------
/main/dtui/dtui.pro:
--------------------------------------------------------------------------------
1 | include (../main.pri)
2 |
3 | QT += core gui
4 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
5 | TEMPLATE = lib
6 | CONFIG += staticlib
7 |
8 | # 添加预编译头文件
9 | CONFIG += PRECOMPILED_HEADER
10 | PRECOMPILED_HEADER = $$PWD/include/stdafx.h
11 |
12 | #
13 | DESTDIR = $$PWD/../../bin/
14 | TARGET = dtui
15 | #
16 | CONFIG += c++14
17 |
18 | # The following define makes your compiler emit warnings if you use
19 | # any Qt feature that has been marked deprecated (the exact warnings
20 | # depend on your compiler). Please consult the documentation of the
21 | # deprecated API in order to know how to port your code away from it.
22 | DEFINES += QT_DEPRECATED_WARNINGS
23 |
24 | # You can also make your code fail to compile if it uses deprecated APIs.
25 | # In order to do so, uncomment the following line.
26 | # You can also select to disable deprecated APIs only up to a certain version of Qt.
27 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
28 |
29 | SOURCES += \
30 | src/dtbutton.cpp \
31 | src/dtcheckbox.cpp \
32 | src/dtgraphicsitem.cpp \
33 | src/dtgraphicsscene.cpp \
34 | src/dtgraphicstool.cpp \
35 | src/dtgraphicsview.cpp \
36 | src/dtgroupbox.cpp \
37 | src/dtlabel.cpp \
38 | src/dtpainter.cpp \
39 | src/dtprogressbar.cpp \
40 | src/dtrangeslider.cpp \
41 | src/dtscrollbar.cpp \
42 | src/dttabwidget.cpp \
43 | src/dttitlebar.cpp \
44 | src/dttoolbar.cpp \
45 | src/dttoolset.cpp \
46 | src/dtui.cpp \
47 | src/sizehandle.cpp
48 |
49 | HEADERS += \
50 | include/dt_stylesheets.h \
51 | include/dtbutton.h \
52 | include/dtcheckbox.h \
53 | include/dtframelesswidget.h \
54 | include/dtgraphicsitem.h \
55 | include/dtgraphicsscene.h \
56 | include/dtgraphicstool.h \
57 | include/dtgraphicsview.h \
58 | include/dtgroupbox.h \
59 | include/dtlabel.h \
60 | include/dtpainter.h \
61 | include/dtprogressbar.h \
62 | include/dtrangeslider.h \
63 | include/dtscrollbar.h \
64 | include/dttabwidget.h \
65 | include/dttitlebar.h \
66 | include/dttoolbar.h \
67 | include/dttoolset.h \
68 | include/dtui.h \
69 | include/dtundocommand.h \
70 | include/sizehandle.h \
71 | include/stdafx.h
72 |
73 | INCLUDEPATH +=\
74 | include \
75 | src \
76 |
77 | # Default rules for deployment.
78 | unix {
79 | target.path = $$[QT_INSTALL_PLUGINS]/generic
80 | }
81 | !isEmpty(target.path): INSTALLS += target
82 |
83 | RESOURCES +=
84 |
--------------------------------------------------------------------------------
/main/dtui/include/dt_stylesheets.h:
--------------------------------------------------------------------------------
1 | #ifndef DT_STYLESHEETS_H
2 | #define DT_STYLESHEETS_H
3 |
4 | // 默认基础控件样式表
5 |
6 | // 工具按钮样式 (标题栏下方)
7 | #define TOOL_BUTTON_STYLE "QPushButton {background-color: rgb(57, 53, 51);} QPushButton:hover { background-color: #292448;} QPushButton:pressed { background-color: #292448; } QPushButton:checked { background-color: #292448; }"
8 |
9 | // 正常按钮样式
10 | #define NORMAL_BUTTON_STYLE "QPushButton { font: 14px;font-family:'Microsoft YaHei'; border-radius: 10px; background-color:rgba(115, 129, 255, 1); color: #EAEAEA;} QPushButton:hover {font: 14px; background-color:rgba(141, 153, 255, 1); color: #EAEAEA;} QPushButton:pressed {font: 14px; background-color:rgba(79, 92, 203, 1); color: #EAEAEA;} QPushButton:checked {font: 14px; background-color:rgba(79, 92, 203, 1); color: #EAEAEA;}"
11 |
12 | // 小一号字体按钮样式
13 | #define SMALL_BUTTON_STYLE "QPushButton { font: 12px; padding:5px; border-radius: 5px; background-color:rgba(115, 129, 255, 1); color: #EAEAEA;} QPushButton:hover {font: 12px; background-color:rgba(141, 153, 255, 1); color: #EAEAEA;} QPushButton:pressed {font: 12px; background-color:rgba(79, 92, 203, 1); color: #EAEAEA;} QPushButton:checked {font: 12px; background-color:rgba(79, 92, 203, 1); color: #EAEAEA;}"
14 |
15 | //todo: checkbox基础样式
16 | #define CHECK_BOX_STYLE "111"
17 |
18 | #endif // DT_STYLESHEETS_H
19 |
--------------------------------------------------------------------------------
/main/dtui/include/dtbutton.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef DTBUTTON_H
3 | #define DTBUTTON_H
4 |
5 | #include "dt_stylesheets.h"
6 |
7 | enum E_BUTTON_TYPE{
8 | BUTTON_NORMAL, // 正常大小
9 | BUTTON_MINI,
10 | BUTTON_BIG,
11 | BUTTON_CIRCLE, // 原型
12 | BUTTON_TRIANGLE, // 椭圆
13 | };
14 |
15 | enum E_BUTTON_STATE{
16 | BUTTON_STATE_HOVER,
17 | BUTTON_STATE_PRESSED,
18 | BUTTON_STATE_DISABLE,
19 | BUTTON_STATE_NORMAL,
20 | BUTTON_STATE_CHECKED,
21 | BUTTON_STATE_UNCHECKED,
22 | };
23 |
24 | enum E_BUTTON_SHAPE {
25 | DEFAULT,
26 | CIRCLE,
27 | TRIANGLE
28 | };
29 |
30 | class DTButton: public QPushButton
31 | {
32 | Q_OBJECT
33 |
34 | public:
35 |
36 | DTButton(QWidget* pWidget = nullptr);
37 |
38 |
39 | signals:
40 | void signalCloseTab(QString tabName);
41 |
42 | protected:
43 | bool event(QEvent *e) override;
44 | void paintEvent(QPaintEvent *) override;
45 | void mousePressEvent(QMouseEvent *e) override;
46 | void mouseReleaseEvent(QMouseEvent *e) override;
47 | void mouseMoveEvent(QMouseEvent *e) override;
48 | void focusInEvent(QFocusEvent *) override;
49 | void focusOutEvent(QFocusEvent *) override;
50 | void enterEvent(QEvent* event) override;
51 | void leaveEvent(QEvent*event) override;
52 |
53 | };
54 |
55 | #endif // DTBUTTON_H
56 |
--------------------------------------------------------------------------------
/main/dtui/include/dtcheckbox.h:
--------------------------------------------------------------------------------
1 | #ifndef DTCHECKBOX_H
2 | #define DTCHECKBOX_H
3 |
4 | #include
5 |
6 | class DTCheckBox: public QCheckBox
7 | {
8 |
9 | };
10 |
11 | #endif // DTCHECKBOX_H
12 |
--------------------------------------------------------------------------------
/main/dtui/include/dtframelesswidget.h:
--------------------------------------------------------------------------------
1 | #ifndef DTFRAMELESSWIDGET_H
2 | #define DTFRAMELESSWIDGET_H
3 |
4 | /*
5 | * 无边框的窗体基类
6 | */
7 | class DTFrameLessWidget: public QWidget
8 | {
9 | public:
10 | DTFrameLessWidget(QWidget* pParent = nullptr);
11 | ~DTFrameLessWidget();
12 |
13 | private:
14 | QWidget* m_pParent;
15 | };
16 |
17 | #endif // DTFRAMELESSWIDGET_H
18 |
--------------------------------------------------------------------------------
/main/dtui/include/dtgraphicsscene.h:
--------------------------------------------------------------------------------
1 | #ifndef DTGRAPHICSSCENE_H
2 | #define DTGRAPHICSSCENE_H
3 |
4 | // 重绘graphicsscene类
5 | #include
6 | #include
7 |
8 | class DTGraphicsScene : public QGraphicsScene
9 | {
10 | Q_OBJECT
11 |
12 | protected:
13 | void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) override;
14 | };
15 |
16 |
17 | #endif // DTGRAPHICSSCENE_H
18 |
--------------------------------------------------------------------------------
/main/dtui/include/dtgraphicstool.h:
--------------------------------------------------------------------------------
1 | #ifndef DTGRAPHICSTOOL_H
2 | #define DTGRAPHICSTOOL_H
3 |
4 |
5 | /**
6 | * @brief: 基类工具类
7 | */
8 | class DTGraphicsTool{
9 |
10 | };
11 |
12 | #endif // DTGRAPHICSTOOL_H
13 |
--------------------------------------------------------------------------------
/main/dtui/include/dtgraphicsview.h:
--------------------------------------------------------------------------------
1 | #ifndef DTGRAPHICSVIEW_H
2 | #define DTGRAPHICSVIEW_H
3 | /*
4 | * 重写QGraphicsView
5 | */
6 | #include
7 |
8 |
9 |
10 | class DTGraphicsView : public QGraphicsView {
11 | Q_OBJECT
12 | public:
13 | // 图形类型
14 | enum E_GRAPHICS_TYPE {
15 | TYPE_RECTANGLE, // 矩形
16 | TYPE_ROTATE_RECTANGLE, // 旋转矩形
17 | TYPE_DISTANCE, // 距离描绘
18 | TYPE_CIRCLE, // 绘制圆
19 | TYPE_RING, //圆环
20 | TYPE_SECTOR, // 扇形
21 | TYPE_IRREGULAR, //不规则图形
22 | };
23 | //
24 | Q_ENUMS(E_GRAPHICS_TYPE)
25 |
26 | DTGraphicsView(QGraphicsScene* pScene,QWidget* pWidget = nullptr);
27 |
28 | DTGraphicsView(QWidget *parent = nullptr);
29 |
30 | /**
31 | * @brief: 加载画布
32 | *
33 | */
34 | bool loadCanvas(QPixmap& qPixmap);
35 |
36 | // 设置显示图像的类型
37 | void setGraphicType(E_GRAPHICS_TYPE graphic_type);
38 | bool getGraphicType(E_GRAPHICS_TYPE& graphic_type);
39 |
40 | /**
41 | * 设置当前的图片
42 | */
43 | void setCurrentImage(const QImage&image)
44 | {
45 | m_currentImage = image;
46 | }
47 |
48 | const QImage& getCurrentImage()
49 | {
50 | return m_currentImage;
51 | }
52 |
53 | void setCanDrag(bool bCan)
54 | {
55 | m_bDrag = bCan;
56 | }
57 |
58 | bool getCanDrag()
59 | {
60 | return m_bDrag;
61 | }
62 |
63 | //Tool
64 | //放大
65 | void tool_ZoomIn();
66 | //缩小
67 | void tool_ZoomOut();
68 | //适应画布
69 | void tool_AdapterToCanvas();
70 | //旋转
71 | void tool_Rotate();
72 |
73 |
74 | /**
75 | * @brief 设置是否允许修改
76 | */
77 | void setModified(bool bModified)
78 | {
79 | m_bModified = bModified;
80 | }
81 |
82 | bool isModified()
83 | {
84 | return m_bModified;
85 | }
86 |
87 | protected:
88 | // overide
89 | void paintEvent(QPaintEvent *event) override;
90 | void mouseMoveEvent(QMouseEvent *event) override;
91 | void wheelEvent(QWheelEvent *event) override;
92 | void mousePressEvent(QMouseEvent *event) override;
93 | void keyPressEvent(QKeyEvent *event) override;
94 | void dropEvent(QDropEvent *event) override;
95 | void focusInEvent(QFocusEvent *event) override;
96 | void focusOutEvent(QFocusEvent *event) override;
97 | void showEvent(QShowEvent *event) override;
98 |
99 | signals:
100 | void positionChanged(int x , int y );
101 |
102 | void signalCurrentPos(double x, double y);
103 |
104 | private:
105 | E_GRAPHICS_TYPE m_eGraphicsType; // 绘图类型
106 | bool m_bSetGraphicsType = false; // 默认为False
107 | QImage m_currentImage; // 当前的图片
108 | QImage m_canvasImage; // 画布图片
109 | bool m_bDrag = false; // 设置是否可拖动
110 | bool m_bModified = false; //是否允许修改
111 | bool m_bInitCanvas = false; // 是否加载画布
112 | };
113 |
114 | #endif // DTGRAPHICSVIEW_H
115 |
--------------------------------------------------------------------------------
/main/dtui/include/dtgroupbox.h:
--------------------------------------------------------------------------------
1 | #ifndef DTGROUPBOX_H
2 | #define DTGROUPBOX_H
3 | #include
4 | #include
5 |
6 | class DTGroupBox: public QWidget
7 | {
8 | Q_OBJECT
9 | public:
10 | explicit DTGroupBox(QWidget* parent = nullptr);
11 | ~DTGroupBox();
12 |
13 | void setTitle(QString& qsTitle);
14 | void setContentWidget(QWidget* contentWidget);
15 |
16 | private:
17 | QWidget * m_pParent; // 父窗体
18 | QPushButton * m_pCloseBtn; // 关闭按钮
19 | QLabel* m_pTitle; // 标题
20 | QVBoxLayout * pVBoxLayout;
21 | };
22 |
23 | #endif // DTGROUPBOX_H
24 |
25 |
--------------------------------------------------------------------------------
/main/dtui/include/dtgroupbox.h.autosave.bIsskx:
--------------------------------------------------------------------------------
1 | #ifndef DTGROUPBOX_H
2 | #define DTGROUPBOX_H
3 | #include
4 |
5 | class DTGroupBox: public QWidget
6 | {
7 | Q_OBJECT
8 | public:
9 | explicit DTGroupBox(QWidget* parent = nullptr);
10 | ~DTGroupBox();
11 |
12 | void setTitle(QString& qsTitle);
13 |
14 |
15 | private:
16 | QWidget * m_pParent; // 父窗体
17 | QPushButton * m_pCloseBtn; // 关闭按钮
18 | QLabel* m_pTitle; // 标题
19 | };
20 |
21 | #endif // DTGROUPBOX_H
22 |
--------------------------------------------------------------------------------
/main/dtui/include/dtlabel.h:
--------------------------------------------------------------------------------
1 | #ifndef DTLABEL_H
2 | #define DTLABEL_H
3 |
4 | #include
5 |
6 | class DTLabel:public QLabel
7 | {
8 |
9 | };
10 |
11 |
12 | #endif // DTLABEL_H
13 |
--------------------------------------------------------------------------------
/main/dtui/include/dtpainter.h:
--------------------------------------------------------------------------------
1 | #ifndef DTPAINTER_H
2 | #define DTPAINTER_H
3 |
4 | #include
5 |
6 | class DTPainter: public QPainter
7 | {
8 |
9 | };
10 |
11 | #endif // DTPAINTER_H
12 |
--------------------------------------------------------------------------------
/main/dtui/include/dtprogressbar.h:
--------------------------------------------------------------------------------
1 | #ifndef DTPROGRESSBAR_H
2 | #define DTPROGRESSBAR_H
3 |
4 | #include
5 |
6 | class DTProgressBar: public QProgressBar
7 | {
8 |
9 | };
10 |
11 | #endif // DTPROGRESSBAR_H
12 |
--------------------------------------------------------------------------------
/main/dtui/include/dtrangeslider.h:
--------------------------------------------------------------------------------
1 | #ifndef DTRANGESLIDER_H
2 | #define DTRANGESLIDER_H
3 | #pragma once
4 |
5 | #include
6 | #include
7 | #include
8 |
9 | /**
10 | * @brief: 双向滑动条
11 | */
12 | class RangeSlider : public QWidget
13 | {
14 | Q_OBJECT
15 | Q_ENUMS(RangeSliderTypes)
16 |
17 | public:
18 | enum Option {
19 | NoHandle = 0x0,
20 | LeftHandle = 0x1,
21 | RightHandle = 0x2,
22 | DoubleHandles = LeftHandle | RightHandle
23 | };
24 | Q_DECLARE_FLAGS(Options, Option)
25 |
26 | RangeSlider( QWidget* aParent = Q_NULLPTR);
27 | RangeSlider( Qt::Orientation ori, Options t = DoubleHandles, QWidget* aParent = Q_NULLPTR);
28 |
29 | QSize minimumSizeHint() const override;
30 |
31 | int GetMinimun() const;
32 | void SetMinimum(int aMinimum);
33 |
34 | int GetMaximun() const;
35 | void SetMaximum(int aMaximum);
36 |
37 | int GetLowerValue() const;
38 | void SetLowerValue(int aLowerValue);
39 |
40 | int GetUpperValue() const;
41 | void SetUpperValue(int aUpperValue);
42 |
43 | void SetRange(int aMinimum, int aMaximum);
44 |
45 | protected:
46 | void paintEvent(QPaintEvent* aEvent) override;
47 | void mousePressEvent(QMouseEvent* aEvent) override;
48 | void mouseMoveEvent(QMouseEvent* aEvent) override;
49 | void mouseReleaseEvent(QMouseEvent* aEvent) override;
50 | void changeEvent(QEvent* aEvent) override;
51 |
52 | QRectF firstHandleRect() const;
53 | QRectF secondHandleRect() const;
54 | QRectF handleRect(int aValue) const;
55 |
56 | signals:
57 | void lowerValueChanged(int aLowerValue);
58 | void upperValueChanged(int aUpperValue);
59 | void rangeChanged(int aMin, int aMax);
60 |
61 | public slots:
62 | void setLowerValue(int aLowerValue);
63 | void setUpperValue(int aUpperValue);
64 | void setMinimum(int aMinimum);
65 | void setMaximum(int aMaximum);
66 |
67 | private:
68 | Q_DISABLE_COPY(RangeSlider)
69 | float currentPercentage();
70 | int validLength() const;
71 |
72 | int mMinimum;
73 | int mMaximum;
74 | int mLowerValue;
75 | int mUpperValue;
76 | bool mFirstHandlePressed;
77 | bool mSecondHandlePressed;
78 | int mInterval;
79 | int mDelta;
80 | QColor mBackgroudColorEnabled;
81 | QColor mBackgroudColorDisabled;
82 | QColor mBackgroudColor;
83 | Qt::Orientation orientation;
84 | Options type;
85 | };
86 |
87 | Q_DECLARE_OPERATORS_FOR_FLAGS(RangeSlider::Options)
88 |
89 | #endif // DTRANGESLIDER_H
90 |
--------------------------------------------------------------------------------
/main/dtui/include/dtscrollbar.h:
--------------------------------------------------------------------------------
1 | #ifndef DTSCROLLBAR_H
2 | #define DTSCROLLBAR_H
3 |
4 | #include
5 |
6 | class DTScrollBar: public QScrollBar
7 | {
8 |
9 | };
10 |
11 | #endif // DTSCROLLBAR_H
12 |
--------------------------------------------------------------------------------
/main/dtui/include/dttabwidget.h:
--------------------------------------------------------------------------------
1 | #ifndef DTTABWIDGET_H
2 | #define DTTABWIDGET_H
3 | #include
4 | #include
5 | #include
6 |
7 | /*
8 | * TabWidget界面重写
9 | */
10 |
11 |
12 | class DTTabWidget: public QWidget
13 | {
14 | Q_OBJECT
15 | public:
16 | DTTabWidget(QWidget* pParent = nullptr);
17 | ~DTTabWidget();
18 |
19 |
20 | /*
21 | * @brief: 添加Tab页的基本信息
22 | * qsTabName: tab名称
23 | * qIcon: 图标
24 | * pWidget: 窗体
25 | * bShowTabName:是否展示Tab名称?展示tab名称:只展示图标
26 | */
27 | void addTabByName(const QString& qsTitle, QIcon qIcon, QString qsObjectName,bool bShowTabName=true);
28 |
29 | /*
30 | * @brief: 设置中间的窗体
31 | */
32 | void setCenterWidget(QWidget* widget);
33 |
34 | QVector getToolButtonVec();
35 |
36 | private:
37 | QVector m_vecToolBtns; // 工具集合
38 | QHBoxLayout * m_pLayout;
39 |
40 | };
41 |
42 |
43 | #endif // DTTABWIDGET_H
44 |
--------------------------------------------------------------------------------
/main/dtui/include/dttitlebar.h:
--------------------------------------------------------------------------------
1 | #ifndef DTTITLEBAR_H
2 | #define DTTITLEBAR_H
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include "dtbutton.h"
10 |
11 | /**
12 | * @brief: 标题栏基类
13 | */
14 | class DTTitleBar: public QWidget
15 | {
16 | Q_OBJECT
17 | public:
18 | explicit DTTitleBar(QWidget* parent = nullptr);
19 | ~DTTitleBar();
20 |
21 |
22 |
23 | public:
24 |
25 | /**
26 | * @brief: 设置标题栏的样式
27 | */
28 | void setTitleBarStyle(const QString& qsStyle);
29 |
30 | void setTitle(const QString& qsTitle); // 设置标题
31 | void setRegion(const QString& qsRegion); // 设置区域
32 |
33 | void addTextLabel(QLabel* qsText, int nPos=0); // 添加文本 nPos: 0:左边 1:右边
34 |
35 |
36 | public slots:
37 | void resizeEvent(QResizeEvent *event) override;
38 |
39 | protected:
40 | void paintEvent(QPaintEvent *event) override;
41 |
42 | private:
43 | void initControls(); // 初始化控件
44 |
45 |
46 | private:
47 | QWidget * m_pParent; // 父窗体
48 | QPushButton * m_pCloseBtn; // 关闭按钮
49 | QHBoxLayout* m_pBtnsHBoxLayout; // 按钮集合
50 | QWidget* m_pTitleWidget; // 内嵌titleWidget
51 | QLabel* pTitleLabel; // 标题字段
52 | QLabel* pRegionLabel; // 区域字段
53 |
54 | QHBoxLayout* m_pLeftHBoxLayout; // Left Layout
55 | QHBoxLayout* m_pRightHBoxLayout; // 按钮集合
56 | };
57 |
58 |
59 | #endif // DTCUSTOMTITLEWIDGET_H
60 |
--------------------------------------------------------------------------------
/main/dtui/include/dttoolbar.h:
--------------------------------------------------------------------------------
1 | #ifndef DTTOOLBAR_H
2 | #define DTTOOLBAR_H
3 | #include
4 | #include
5 | #include "dtbutton.h"
6 |
7 | // 工具栏控件封装
8 | class DTToolBar: public QWidget
9 | {
10 | Q_OBJECT
11 | public:
12 | explicit DTToolBar(QWidget* parent = nullptr);
13 | ~DTToolBar();
14 |
15 | public:
16 |
17 | /*
18 | * @brief: 添加工具
19 | * qsToolName: 工具名称
20 | * qIcon: 工具图标
21 | * btn: 工具按钮
22 | * align: 图标放置位置,默认左侧
23 | */
24 | void addTool(const QString& qsToolName, QIcon qIcon, QPushButton* btn, Qt::Alignment align = Qt::AlignLeft);
25 |
26 | /*
27 | * @brief:设置背景颜色
28 | * qc: 需要设置的背景颜色
29 | */
30 | void setBackgroundColor(const QColor& qc);
31 |
32 | /**
33 | * @brief: 添加分割线
34 | */
35 | void addSplitLine();
36 |
37 |
38 | private slots:
39 | void slotActivated(const QString& qsActivated);
40 |
41 | private:
42 | QHBoxLayout* m_pBtnsLayout;
43 | QHBoxLayout* m_pToolsLayout;
44 | QVector m_vecBtns;
45 | };
46 |
47 |
48 | #endif // DTTOOLBAR_H
49 |
--------------------------------------------------------------------------------
/main/dtui/include/dttoolset.h:
--------------------------------------------------------------------------------
1 | #ifndef DTTOOLSET_H
2 | #define DTTOOLSET_H
3 | #include "../include/dtbutton.h"
4 |
5 | ///
6 | /// \brief 工具集的类
7 | ///
8 | class DTToolSet: public QWidget
9 | {
10 | Q_OBJECT
11 | public:
12 | DTToolSet(QWidget* pWidget);
13 | ~DTToolSet();
14 |
15 | ///
16 | /// \brief addToolButton
17 | /// \param pButton
18 | ///
19 | void addToolButton(DTButton* pButton);
20 |
21 | ///
22 | /// \brief getAllButtons 获取所有按钮的列表
23 | /// \return
24 | ///
25 | QVector getAllButtons();
26 |
27 | private:
28 | QWidget* m_pParentWidget; // 父类窗体
29 | QVector m_vecButtons; // 按钮集合
30 | };
31 |
32 | #endif // DTTOOLSET_H
33 |
--------------------------------------------------------------------------------
/main/dtui/include/dtui.h:
--------------------------------------------------------------------------------
1 | #ifndef DTUI_H
2 | #define DTUI_H
3 |
4 | class Dtui
5 | {
6 | public:
7 | Dtui();
8 | };
9 |
10 | #endif // DTUI_H
11 |
--------------------------------------------------------------------------------
/main/dtui/include/dtundocommand.h:
--------------------------------------------------------------------------------
1 | #ifndef DTUNDOCOMMAND_H
2 | #define DTUNDOCOMMAND_H
3 |
4 | // 撤回消息
5 | #include
6 | #include "dtgraphicsitem.h"
7 |
8 | class MoveShapeCommand : public QUndoCommand
9 | {
10 | public:
11 | MoveShapeCommand(QGraphicsScene *graphicsScene, const QPointF & delta ,
12 | QUndoCommand * parent = 0);
13 | MoveShapeCommand(QGraphicsItem * item, const QPointF & delta , QUndoCommand * parent = 0);
14 | void undo() Q_DECL_OVERRIDE;
15 | void redo() Q_DECL_OVERRIDE;
16 | private:
17 | QGraphicsScene *m_myGraphicsScene;
18 | QGraphicsItem *m_myItem;
19 | QList m_myItems;
20 | QPointF m_myDelta;
21 | bool m_bMoved;
22 | };
23 |
24 | class ResizeShapeCommand : public QUndoCommand
25 | {
26 | public:
27 | enum { Id = 1234, };
28 | ResizeShapeCommand(QGraphicsItem * item ,
29 | int handle,
30 | const QPointF& scale,
31 | QUndoCommand *parent = 0 );
32 | void undo() Q_DECL_OVERRIDE;
33 | void redo() Q_DECL_OVERRIDE;
34 |
35 | bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE;
36 | int id() const Q_DECL_OVERRIDE { return Id; }
37 | private:
38 | QGraphicsItem *m_myItem;
39 | int m_handle_;
40 | int m_opposite_;
41 | QPointF m_scale_;
42 | bool m_bResized;
43 | };
44 |
45 | class ControlShapeCommand : public QUndoCommand
46 | {
47 | public:
48 | enum { Id = 1235, };
49 | ControlShapeCommand(QGraphicsItem * item ,
50 | int handle,
51 | const QPointF& newPos,
52 | const QPointF& lastPos,
53 | QUndoCommand *parent = 0 );
54 | void undo() Q_DECL_OVERRIDE;
55 | void redo() Q_DECL_OVERRIDE;
56 |
57 | bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE;
58 | int id() const Q_DECL_OVERRIDE { return Id; }
59 |
60 | private:
61 | QGraphicsItem *m_myItem;
62 | int m_handle_;
63 | QPointF m_lastPos_;
64 | QPointF m_newPos_;
65 | bool m_bControled;
66 | };
67 |
68 |
69 | class RotateShapeCommand : public QUndoCommand
70 | {
71 | public:
72 | RotateShapeCommand(QGraphicsItem *item , const qreal oldAngle ,
73 | QUndoCommand * parent = 0);
74 | void undo() Q_DECL_OVERRIDE;
75 | void redo() Q_DECL_OVERRIDE;
76 | private:
77 | QGraphicsItem *m_myItem;
78 | qreal m_myOldAngle;
79 | qreal m_newAngle;
80 | };
81 |
82 | class RemoveShapeCommand : public QUndoCommand
83 | {
84 | public:
85 | explicit RemoveShapeCommand(QGraphicsScene *graphicsScene, QUndoCommand *parent = 0);
86 | ~RemoveShapeCommand();
87 | void undo() Q_DECL_OVERRIDE;
88 | void redo() Q_DECL_OVERRIDE;
89 |
90 | private:
91 | QList m_items;
92 | QGraphicsScene *m_myGraphicsScene;
93 | };
94 |
95 | class GroupShapeCommand : public QUndoCommand
96 | {
97 | public:
98 | explicit GroupShapeCommand( QGraphicsItemGroup * group, QGraphicsScene *graphicsScene,
99 | QUndoCommand *parent = 0);
100 | void undo() Q_DECL_OVERRIDE;
101 | void redo() Q_DECL_OVERRIDE;
102 | private:
103 | QList m_sitems;
104 | QGraphicsItemGroup * m_myGroup;
105 | QGraphicsScene *m_myGraphicsScene;
106 | bool m_b_undo;
107 | };
108 |
109 | class UnGroupShapeCommand : public QUndoCommand
110 | {
111 | public:
112 | explicit UnGroupShapeCommand( QGraphicsItemGroup * group, QGraphicsScene *graphicsScene,
113 | QUndoCommand *parent = 0);
114 | void undo() Q_DECL_OVERRIDE;
115 | void redo() Q_DECL_OVERRIDE;
116 | private:
117 | QList m_items;
118 | QGraphicsItemGroup * m_myGroup;
119 | QGraphicsScene *m_myGraphicsScene;
120 | };
121 |
122 | class AddShapeCommand : public QUndoCommand
123 | {
124 | public:
125 | AddShapeCommand(QGraphicsItem *item , QGraphicsScene *graphicsScene,
126 | QUndoCommand *parent = 0);
127 | ~AddShapeCommand();
128 |
129 | void undo() Q_DECL_OVERRIDE;
130 | void redo() Q_DECL_OVERRIDE;
131 |
132 | private:
133 | QGraphicsItem *m_myDiagramItem;
134 | QGraphicsScene *m_myGraphicsScene;
135 | QPointF m_initialPosition;
136 | };
137 |
138 | QString createCommandString(QGraphicsItem *item, const QPointF &point);
139 |
140 |
141 | #endif // DTUNDOCOMMAND_H
142 |
--------------------------------------------------------------------------------
/main/dtui/include/sizehandle.h:
--------------------------------------------------------------------------------
1 | #ifndef SIZEHANDLE_H
2 | #define SIZEHANDLE_H
3 |
4 | #include
5 | #include
6 |
7 | QT_BEGIN_NAMESPACE
8 | class QColor;
9 | class QFocusEvent;
10 | class QGraphicsItem;
11 | class QGraphicsScene;
12 | class QGraphicsSceneMouseEvent;
13 | class QGraphicsSceneHoverEvent;
14 | QT_END_NAMESPACE
15 |
16 |
17 | enum { SELECTION_HANDLE_SIZE = 6, SELECTION_MARGIN = 10 };
18 | enum SelectionHandleState { SelectionHandleOff, SelectionHandleInactive, SelectionHandleActive };
19 | enum { Handle_None = 0 , LeftTop , Top, RightTop, Right, RightBottom, Bottom, LeftBottom, Left };
20 |
21 | class SizeHandleRect :public QGraphicsRectItem
22 | {
23 | public:
24 |
25 | SizeHandleRect(QGraphicsItem* parent , int d , bool control = false );
26 | int dir() const { return m_dir; }
27 | void setState(SelectionHandleState st);
28 | void move(qreal x, qreal y );
29 | protected:
30 | void hoverEnterEvent(QGraphicsSceneHoverEvent *e );
31 | void hoverLeaveEvent(QGraphicsSceneHoverEvent *e );
32 | void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
33 |
34 | private:
35 | const int m_dir;
36 | bool m_controlPoint;
37 | SelectionHandleState m_state;
38 | QColor borderColor;
39 | };
40 |
41 | #endif // SIZEHANDLE_H
42 |
--------------------------------------------------------------------------------
/main/dtui/include/stdafx.h:
--------------------------------------------------------------------------------
1 | #ifndef STDAFX_H
2 | #define STDAFX_H
3 |
4 | // 添加预编译头文件
5 | #include
6 | #include
7 | #include
8 | #include
9 |
10 | #endif // STDAFX_H
11 |
--------------------------------------------------------------------------------
/main/dtui/include/stdafx.h.cpp:
--------------------------------------------------------------------------------
1 | /*--------------------------------------------------------------------
2 | * Precompiled header source file used by Visual Studio.NET to generate
3 | * the .pch file.
4 | *
5 | * Due to issues with the dependencies checker within the IDE, it
6 | * sometimes fails to recompile the PCH file, if we force the IDE to
7 | * create the PCH file directly from the header file.
8 | *
9 | * This file is auto-generated by qmake since no PRECOMPILED_SOURCE was
10 | * specified, and is used as the common stdafx.cpp. The file is only
11 | * generated when creating .vcxproj project files, and is not used for
12 | * command line compilations by nmake.
13 | *
14 | * WARNING: All changes made in this file will be lost.
15 | --------------------------------------------------------------------*/
16 | #include "stdafx.h"
17 |
--------------------------------------------------------------------------------
/main/dtui/resources/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtui/resources/icon.ico
--------------------------------------------------------------------------------
/main/dtui/src/dtbutton.cpp:
--------------------------------------------------------------------------------
1 | #include "dtbutton.h"
2 | #include
3 | #include
4 | #include
5 |
6 |
7 | DTButton::DTButton(QWidget* pWidget):QPushButton(pWidget)
8 | {
9 | setAttribute(Qt::WA_StyledBackground, true);
10 | setWindowFlag(Qt::FramelessWindowHint);
11 | }
12 |
13 |
14 | bool DTButton::event(QEvent *e)
15 | {
16 | return QPushButton::event(e);
17 | }
18 |
19 | void DTButton::paintEvent(QPaintEvent *event)
20 | {
21 | QPushButton::paintEvent(event);
22 | return ;
23 | }
24 |
25 | void DTButton::mousePressEvent(QMouseEvent *e)
26 | {
27 | QPushButton::mousePressEvent(e);
28 | }
29 |
30 | void DTButton::mouseMoveEvent(QMouseEvent *e)
31 | {
32 | QPushButton::mouseMoveEvent(e);
33 | }
34 |
35 | void DTButton::mouseReleaseEvent(QMouseEvent *e)
36 | {
37 | QPushButton::mouseReleaseEvent(e);
38 | }
39 |
40 | void DTButton::focusInEvent(QFocusEvent * e)
41 | {
42 | QPushButton::focusInEvent(e);
43 | }
44 |
45 | void DTButton::focusOutEvent(QFocusEvent *e)
46 | {
47 | QPushButton::focusOutEvent(e);
48 | }
49 |
50 | void DTButton::leaveEvent(QEvent *event)
51 | {
52 | QPushButton::leaveEvent(event);
53 |
54 | }
55 |
56 | void DTButton::enterEvent(QEvent *event)
57 | {
58 | QPushButton::enterEvent(event);
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/main/dtui/src/dtcheckbox.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtui/src/dtcheckbox.cpp
--------------------------------------------------------------------------------
/main/dtui/src/dtgraphicsitem.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtui/src/dtgraphicsitem.cpp
--------------------------------------------------------------------------------
/main/dtui/src/dtgraphicsscene.cpp:
--------------------------------------------------------------------------------
1 | #include "dtgraphicsscene.h"
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | void DTGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
10 | {
11 | QGraphicsScene::mouseMoveEvent(mouseEvent);
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/main/dtui/src/dtgraphicstool.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtui/src/dtgraphicstool.cpp
--------------------------------------------------------------------------------
/main/dtui/src/dtgraphicsview.cpp:
--------------------------------------------------------------------------------
1 | #include "dtgraphicsview.h"
2 | #include
3 | #include
4 | #include
5 |
6 | DTGraphicsView::DTGraphicsView(QGraphicsScene* pScene
7 | ,QWidget*pWidget):QGraphicsView(pScene)
8 | {
9 | // ToDo:设置相关的视图范围
10 | if(pWidget)
11 | setViewport(pWidget);
12 | setAttribute(Qt::WA_DeleteOnClose);
13 | setAttribute(Qt::WA_StyledBackground, true);
14 | }
15 |
16 |
17 | DTGraphicsView::DTGraphicsView(QWidget* pWidget_)
18 | {
19 | //QGraphicsView::QGraphicsView();
20 | }
21 |
22 | void DTGraphicsView::setGraphicType(E_GRAPHICS_TYPE graphic_type)
23 | {
24 | m_eGraphicsType = graphic_type;
25 | m_bSetGraphicsType = true;
26 | }
27 |
28 | bool DTGraphicsView::getGraphicType(E_GRAPHICS_TYPE &graphic_type)
29 | {
30 | if(m_bSetGraphicsType)
31 | {
32 | graphic_type = m_eGraphicsType;
33 | return true;
34 | }
35 | else{
36 | return false;
37 | }
38 | }
39 |
40 | /**
41 | * @brief: 放大
42 | */
43 | void DTGraphicsView::tool_ZoomIn()
44 | {
45 | scale(1.2,1.2);
46 | }
47 |
48 | /**
49 | * @brief: 缩小
50 | */
51 | void DTGraphicsView::tool_ZoomOut()
52 | {
53 | scale(1/1.2,1/1.2);
54 | }
55 |
56 | /**
57 | * @brief: 旋转
58 | */
59 | void DTGraphicsView::tool_Rotate()
60 | {
61 | //todo
62 | // 默认每次旋转1.2
63 | rotate(1.2);
64 | }
65 |
66 | /**
67 | * @brief: 适应画布
68 | */
69 | void DTGraphicsView::tool_AdapterToCanvas()
70 | {
71 | //todo
72 | }
73 |
74 | bool DTGraphicsView::loadCanvas(QPixmap &qPixmap)
75 | {
76 | QGraphicsScene *scene = new QGraphicsScene;
77 | scene->addPixmap(qPixmap);
78 | setScene(scene);
79 | return true;
80 | }
81 |
82 | void DTGraphicsView::mouseMoveEvent(QMouseEvent *event)
83 | {
84 | // 发送Move事件
85 | QPointF pt =mapToScene(event->pos());
86 | emit positionChanged(pt.x(), pt.y());
87 | QGraphicsView::mouseMoveEvent(event);
88 | }
89 |
90 | void DTGraphicsView::paintEvent(QPaintEvent *event)
91 | {
92 | QGraphicsView::paintEvent(event);
93 | }
94 |
95 | void DTGraphicsView::wheelEvent(QWheelEvent *event)
96 | {
97 | QGraphicsView::wheelEvent(event);
98 | }
99 |
100 | void DTGraphicsView::mousePressEvent(QMouseEvent *event)
101 | {
102 | QGraphicsView::mousePressEvent(event);
103 | }
104 |
105 | void DTGraphicsView::keyPressEvent(QKeyEvent *event)
106 | {
107 | QGraphicsView::keyPressEvent(event);
108 | }
109 |
110 | void DTGraphicsView::dropEvent(QDropEvent *event)
111 | {
112 | QGraphicsView::dropEvent(event);
113 | }
114 |
115 | void DTGraphicsView::focusInEvent(QFocusEvent *event)
116 | {
117 | QGraphicsView::focusInEvent(event);
118 | }
119 |
120 | void DTGraphicsView::focusOutEvent(QFocusEvent *event)
121 | {
122 | QGraphicsView::focusOutEvent(event);
123 | }
124 |
125 | void DTGraphicsView::showEvent(QShowEvent *event)
126 | {
127 | QGraphicsView::showEvent(event);
128 | }
129 |
130 |
131 |
--------------------------------------------------------------------------------
/main/dtui/src/dtgroupbox.cpp:
--------------------------------------------------------------------------------
1 | #include "dtgroupbox.h"
2 | #include
3 | #include
4 | #include "dt_stylesheets.h"
5 | #include
6 |
7 | // 处理中文乱码使用
8 | #if defined(_MSC_VER) && (_MSC_VER >= 1600)
9 | # pragma execution_character_set("utf-8")
10 | #endif
11 |
12 | DTGroupBox::DTGroupBox(QWidget* parent):QWidget(parent)
13 | {
14 | setWindowFlag(Qt::FramelessWindowHint);
15 | setAttribute(Qt::WA_StyledBackground,true);
16 | if(parent)
17 | {
18 | m_pParent = parent;
19 | }
20 | pVBoxLayout = new QVBoxLayout(this);
21 | QHBoxLayout * pCloseLayout = new QHBoxLayout();
22 | pVBoxLayout->addLayout(pCloseLayout);
23 | pVBoxLayout->addStretch();
24 | m_pTitle = new QLabel();
25 | m_pTitle->setObjectName("win_control_title");
26 | m_pCloseBtn = new QPushButton(this);
27 | m_pCloseBtn->setFixedSize(22,22);
28 | m_pCloseBtn->setObjectName("window_nor_close");
29 | m_pCloseBtn->setFocusPolicy(Qt::NoFocus);
30 | pCloseLayout->addSpacing(10);
31 | pCloseLayout->addWidget(m_pTitle);
32 | pCloseLayout->addStretch();
33 | pCloseLayout->addWidget(m_pCloseBtn);
34 | // 隐藏当前的界面
35 | connect(m_pCloseBtn,&QPushButton::clicked,[=](bool isChecked){
36 | this->hide();
37 | });
38 | }
39 |
40 | DTGroupBox::~DTGroupBox()
41 | {
42 |
43 | }
44 |
45 | void DTGroupBox::setTitle(QString &qsTitle)
46 | {
47 | m_pTitle->setText(qsTitle);
48 | }
49 |
50 | void DTGroupBox::setContentWidget(QWidget *contentWidget)
51 | {
52 | pVBoxLayout->addWidget(contentWidget);
53 | }
54 |
--------------------------------------------------------------------------------
/main/dtui/src/dtlabel.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtui/src/dtlabel.cpp
--------------------------------------------------------------------------------
/main/dtui/src/dtpainter.cpp:
--------------------------------------------------------------------------------
1 | #include "dtpainter.h"
2 |
--------------------------------------------------------------------------------
/main/dtui/src/dtprogressbar.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtui/src/dtprogressbar.cpp
--------------------------------------------------------------------------------
/main/dtui/src/dtscrollbar.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/main/dtui/src/dtscrollbar.cpp
--------------------------------------------------------------------------------
/main/dtui/src/dttabwidget.cpp:
--------------------------------------------------------------------------------
1 | #include "dttabwidget.h"
2 |
3 |
4 | DTTabWidget::DTTabWidget(QWidget * pParent)
5 | {
6 | setWindowFlag(Qt::FramelessWindowHint);
7 | //setAttribute(Qt::WA_TranslucentBackground, true);
8 | setAttribute(Qt::WA_StyledBackground,true);
9 | setFixedHeight(80);
10 | m_pLayout = new QHBoxLayout(this);
11 | setLayout(m_pLayout);
12 | //setStyleSheet("QWidget {background-color:#4de7f7;}");
13 | };
14 |
15 | DTTabWidget::~DTTabWidget()
16 | {
17 |
18 | }
19 |
20 | void DTTabWidget::addTabByName(const QString &qsTabName, QIcon qIcon, QString qsObjectName, bool bShowTabName)
21 | {
22 | QToolButton* toolBtn = new QToolButton(this);
23 | toolBtn->setText(qsTabName);
24 | //toolBtn->setIcon(qIcon);
25 | toolBtn->setObjectName(qsObjectName);
26 | toolBtn->setFixedSize(120,30);
27 | toolBtn->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextUnderIcon);
28 | if(!bShowTabName)
29 | {
30 | toolBtn->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonIconOnly); // 只展示Icon
31 | }
32 | m_pLayout->addWidget(toolBtn);
33 | m_pLayout->addSpacing(5);
34 | m_vecToolBtns.append(toolBtn);
35 | }
36 |
37 | void DTTabWidget::setCenterWidget(QWidget *widget)
38 | {
39 | m_pLayout->addWidget(widget);
40 | m_pLayout->addSpacing(5);
41 | }
42 |
43 | QVector DTTabWidget::getToolButtonVec()
44 | {
45 | return m_vecToolBtns;
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/main/dtui/src/dttitlebar.cpp:
--------------------------------------------------------------------------------
1 | #include "dttitlebar.h"
2 | #include
3 | #include
4 | #include "dt_stylesheets.h"
5 |
6 | // 处理中文乱码使用
7 | #if defined(_MSC_VER) && (_MSC_VER >= 1600)
8 | # pragma execution_character_set("utf-8")
9 | #endif
10 |
11 | DTTitleBar::DTTitleBar(QWidget* parent):QWidget(parent)
12 | {
13 | setWindowFlag(Qt::FramelessWindowHint);
14 | setAttribute(Qt::WA_StyledBackground,true);
15 | if(parent)
16 | {
17 | m_pParent = parent;
18 | }
19 | initControls();
20 | }
21 |
22 | DTTitleBar::~DTTitleBar()
23 | {
24 |
25 | }
26 |
27 | void DTTitleBar::setTitleBarStyle(const QString &qsStyle)
28 | {
29 | this->setStyleSheet(qsStyle);
30 | }
31 |
32 | void DTTitleBar::setTitle(const QString &qsTitle)
33 | {
34 | pTitleLabel->setText(qsTitle);
35 | }
36 |
37 | void DTTitleBar::addTextLabel(QLabel *qsText, int nPos)
38 | {
39 | if(nPos ==0)
40 | {
41 | m_pLeftHBoxLayout->addWidget(qsText);
42 | }
43 | else{
44 | m_pRightHBoxLayout->addWidget(qsText);
45 | }
46 | m_pRightHBoxLayout->addSpacing(2);
47 | }
48 |
49 | void DTTitleBar::setRegion(const QString &qsRegion)
50 | {
51 | pRegionLabel->setText(qsRegion);
52 | }
53 |
54 | void DTTitleBar::resizeEvent(QResizeEvent *event)
55 | {
56 |
57 | }
58 |
59 | void DTTitleBar::paintEvent(QPaintEvent *event)
60 | {
61 | QWidget::paintEvent(event);
62 | }
63 |
64 | void DTTitleBar::initControls()
65 | {
66 | m_pLeftHBoxLayout = new QHBoxLayout();
67 | m_pLeftHBoxLayout->setMargin(0);
68 | m_pLeftHBoxLayout->setContentsMargins(0,0,0,0);
69 | m_pRightHBoxLayout = new QHBoxLayout();
70 | m_pRightHBoxLayout->setMargin(0);
71 | m_pRightHBoxLayout->setContentsMargins(0,0,0,0);
72 | m_pBtnsHBoxLayout = new QHBoxLayout(this);
73 | m_pBtnsHBoxLayout->setMargin(0);
74 | m_pBtnsHBoxLayout->setContentsMargins(0,0,0,0);
75 | this->setLayout(m_pBtnsHBoxLayout);
76 |
77 | m_pTitleWidget = new QWidget(this);
78 | m_pTitleWidget->setObjectName("window_title_widget");
79 | m_pTitleWidget->setFixedSize(636,98);
80 | pTitleLabel = new QLabel(m_pTitleWidget);
81 | pTitleLabel->setObjectName("win_title");
82 | pTitleLabel->setGeometry(250,-10,400,68);
83 |
84 | pRegionLabel = new QLabel(m_pTitleWidget);
85 | pRegionLabel->setObjectName("win_region");
86 | pRegionLabel->setGeometry(296,53,400,30);
87 | m_pBtnsHBoxLayout->addStretch();
88 | m_pBtnsHBoxLayout->addLayout(m_pLeftHBoxLayout);
89 | m_pBtnsHBoxLayout->addWidget(m_pTitleWidget);
90 | m_pBtnsHBoxLayout->addLayout(m_pRightHBoxLayout);
91 |
92 | m_pCloseBtn = new QPushButton(this);
93 | m_pCloseBtn->setFixedSize(36,32);
94 | m_pCloseBtn->setObjectName("window_close");
95 | m_pCloseBtn->setFocusPolicy(Qt::NoFocus);
96 | m_pCloseBtn->setToolTip(tr("关闭"));
97 |
98 | connect(m_pCloseBtn,SIGNAL(clicked()),m_pParent,SLOT(slotCloseEvent()));
99 | m_pBtnsHBoxLayout->addStretch();
100 | QVBoxLayout *pCloseLayout = new QVBoxLayout(this);
101 | pCloseLayout->addSpacing(14);
102 | pCloseLayout->addWidget(m_pCloseBtn);
103 | pCloseLayout->addStretch();
104 | m_pBtnsHBoxLayout->addLayout(pCloseLayout);
105 | m_pBtnsHBoxLayout->addSpacing(7);
106 | }
107 |
108 |
--------------------------------------------------------------------------------
/main/dtui/src/dttoolbar.cpp:
--------------------------------------------------------------------------------
1 | #include "dttoolbar.h"
2 | #include "dt_stylesheets.h"
3 | #include
4 | #include
5 | #pragma execution_character_set("utf-8")
6 |
7 | DTToolBar::DTToolBar(QWidget* parent)
8 | {
9 | setWindowFlag(Qt::FramelessWindowHint);
10 | setAttribute(Qt::WA_StyledBackground, true);
11 | m_pBtnsLayout = new QHBoxLayout(this);
12 | m_pBtnsLayout->setMargin(0);
13 | m_pBtnsLayout->setContentsMargins(0,0,0,0);
14 | m_pBtnsLayout->setGeometry(QRect(QPoint(0,0),QSize(this->width(),this->height())));
15 | m_pToolsLayout = new QHBoxLayout(this);
16 | m_pToolsLayout->setMargin(0);
17 | m_pToolsLayout->setContentsMargins(0,0,0,0);
18 | m_pBtnsLayout->addStretch();
19 | m_pBtnsLayout->addLayout(m_pToolsLayout);
20 | m_pBtnsLayout->addStretch();
21 | this->setLayout(m_pBtnsLayout);
22 | }
23 |
24 | DTToolBar::~DTToolBar()
25 | {
26 |
27 | }
28 |
29 | // 工具栏增加工具
30 | void DTToolBar::addTool(const QString &qsToolName, QIcon qIcon, QPushButton* btn, Qt::Alignment align)
31 | {
32 | //todo
33 | m_vecBtns.append(btn);
34 | btn->setAttribute(Qt::WA_StyledBackground, true);
35 | btn->setIcon(qIcon);
36 | btn->setIconSize(QSize(16,16));
37 | btn->setStyleSheet(TOOL_BUTTON_STYLE);
38 | btn->setChecked(btn->isChecked()?true:false);
39 | m_pToolsLayout->addWidget(btn,0,align);
40 | }
41 |
42 | void DTToolBar::slotActivated(const QString& qsActivated)
43 | {
44 | }
45 |
46 | void DTToolBar::setBackgroundColor(const QColor& qc)
47 | {
48 | QPalette qpa(this->palette());
49 | qpa.setColor(QPalette::Background,qc);
50 | this->setAutoFillBackground(true);
51 | this->setPalette(qpa);
52 | this->show();
53 | }
54 |
55 | void DTToolBar::addSplitLine()
56 | {
57 | QFrame* line = new QFrame(nullptr);
58 | line->setFixedHeight(16);
59 | line->setFixedWidth(1);
60 | line->setFrameShape(QFrame::VLine);
61 | line->setFrameShadow(QFrame::Sunken);
62 | line->setStyleSheet("background-color: rgba(255, 255, 255, 0.1);");
63 | m_pToolsLayout->addWidget(line,0);
64 | }
65 |
66 |
--------------------------------------------------------------------------------
/main/dtui/src/dttoolset.cpp:
--------------------------------------------------------------------------------
1 | #include "dttoolset.h"
2 |
3 | DTToolSet::DTToolSet(QWidget*pWidget)
4 | {
5 | m_pParentWidget = pWidget;
6 | }
7 |
8 | void DTToolSet::addToolButton(DTButton *pButton)
9 | {
10 | m_vecButtons.append(pButton);
11 | }
12 |
13 | QVector DTToolSet::getAllButtons()
14 | {
15 | return m_vecButtons;
16 | }
17 |
--------------------------------------------------------------------------------
/main/dtui/src/dtui.cpp:
--------------------------------------------------------------------------------
1 | #include "dtui.h"
2 |
3 | Dtui::Dtui()
4 | {
5 | }
6 |
--------------------------------------------------------------------------------
/main/dtui/src/sizehandle.cpp:
--------------------------------------------------------------------------------
1 | #include "sizehandle.h"
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | SizeHandleRect::SizeHandleRect(QGraphicsItem* parent , int d, bool control)
10 | :QGraphicsRectItem(-SELECTION_HANDLE_SIZE/2,
11 | -SELECTION_HANDLE_SIZE/2,
12 | SELECTION_HANDLE_SIZE,
13 | SELECTION_HANDLE_SIZE,parent)
14 | ,m_dir(d)
15 | ,m_controlPoint(control)
16 | ,m_state(SelectionHandleOff)
17 | ,borderColor("white")
18 | {
19 | this->setAcceptHoverEvents(true);
20 | setFlag(QGraphicsItem::ItemIgnoresTransformations,true);
21 | hide();
22 | }
23 |
24 |
25 | void SizeHandleRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
26 | {
27 | painter->save();
28 | painter->setPen(Qt::SolidLine);
29 | painter->setBrush(QBrush(borderColor));
30 |
31 | painter->setRenderHint(QPainter::Antialiasing,false);
32 |
33 | if ( m_controlPoint )
34 | {
35 | painter->setPen(QPen(Qt::red,Qt::SolidLine));
36 | painter->setBrush(Qt::green);
37 | painter->drawEllipse(rect().center(),3,3);
38 | }else
39 | painter->drawRect(rect());
40 | painter->restore();
41 | }
42 |
43 |
44 | void SizeHandleRect::setState(SelectionHandleState st)
45 | {
46 | if (st == m_state)
47 | return;
48 | switch (st) {
49 | case SelectionHandleOff:
50 | hide();
51 | break;
52 | case SelectionHandleInactive:
53 | case SelectionHandleActive:
54 | show();
55 | break;
56 | }
57 | borderColor = Qt::white;
58 | m_state = st;
59 | }
60 |
61 | void SizeHandleRect::move(qreal x, qreal y)
62 | {
63 | setPos(x,y);
64 | }
65 |
66 | void SizeHandleRect::hoverEnterEvent(QGraphicsSceneHoverEvent *e)
67 | {
68 | borderColor = Qt::blue;
69 | update();
70 | QGraphicsRectItem::hoverEnterEvent(e);
71 | }
72 |
73 | void SizeHandleRect::hoverLeaveEvent(QGraphicsSceneHoverEvent *e)
74 | {
75 | borderColor = Qt::white;
76 | update();
77 | QGraphicsRectItem::hoverLeaveEvent(e);
78 | }
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/main/main.pri:
--------------------------------------------------------------------------------
1 | # 所有的动态库都需要包含该.pri
2 | DEFINES += DEBUG # debug模式下开启(默认开启)
3 |
4 | # 处理编译器无法识别M_PI的问题
5 | DEFINES += _USE_MATH_DEFINES
6 | DEFINES += DUMP_GENERATE # dump文件生成标志
7 |
8 | # 设置Release版本可以调试
9 | QMAKE_CXXFLAGS_RELEASE = -Od -ZI -MD
10 | QMAKE_LFLAGS_RELEASE = /DEBUG /INCREMENTAL:NO
11 |
12 |
13 |
--------------------------------------------------------------------------------
/main/main.pro:
--------------------------------------------------------------------------------
1 | TEMPLATE = subdirs
2 | include (main.pri)
3 |
4 | CONFIG += ordered
5 |
6 |
7 | SUBDIRS +=\
8 | dtclient \
9 | common \
10 | dtui
11 |
12 |
--------------------------------------------------------------------------------
/scripts/README.md:
--------------------------------------------------------------------------------
1 | #### 说明
2 |
3 | ----
4 |
5 | * 自动化部署脚本 ```pack.py```
6 | * 执行的操作如下:
7 | 1. 自动删除安装包多余文件
8 | 2. 打包发送到云服务器中
9 | 3. 抄送给对应的邮箱
10 | * 运行方式:
11 | 1. 添加Python3环境
12 | 2. 运行```pip install virtualenv```
13 | 3. 执行```virtualenv venv```
14 | 4. 执行```source venv/bin/activate``` 进入到虚拟环境
15 | 5. 执行```pip install -r requirements.txt```安装相关依赖
16 | 6. 执行```python pack.py```自动编译打包
--------------------------------------------------------------------------------
/scripts/pack.py:
--------------------------------------------------------------------------------
1 | # 打包安装脚本
2 | import os
3 | from time import time
4 | from traceback import format_exception_only
5 | import zipfile
6 | import datetime
7 | import yagmail
8 | from upload import cos_upload_file
9 |
10 | # 需要配置本地windeployqt.exe 以及生成文件路径
11 | install_path = '''C:\\Qt\\Qt5.14.2\\5.14.2\\msvc2017_64\\bin\\windeployqt.exe ..\\bin\\dtdt.exe'''
12 |
13 |
14 | def send_email(file_path, email_address,cc_email, str_content,str_title):
15 | # 需要自己配置user和password
16 | yag = yagmail.SMTP( user='xxxx@qq.com', password='xxxxxxx', host='smtp.partner.outlook.cn',port=587, smtp_starttls=True, smtp_ssl=False)
17 | if file_path != "":
18 | yag.send(to = email_address, cc=cc_email ,subject = str_title ,contents=str_content, attachments=file_path)
19 | else:
20 | yag.send(to = email_address, cc=cc_email ,subject = str_title ,contents=str_content)
21 |
22 |
23 | def get_file_path(root_path, file_list, dir_list):
24 | # 获取该目录下所有的文件名称和目录名称
25 | dir_or_files = os.listdir(root_path)
26 | for dir_file in dir_or_files:
27 | # 获取目录或者文件的路径
28 | dir_file_path = os.path.join(root_path, dir_file)
29 | # 判断该路径为文件还是路径
30 | if os.path.isdir(dir_file_path):
31 | dir_list.append(dir_file_path)
32 | # 递归获取所有文件和目录的路径
33 | get_file_path(dir_file_path, file_list, dir_list)
34 | else:
35 | file_list.append(dir_file_path)
36 |
37 |
38 | def delete_file(file_list):
39 | for file_name in file_list:
40 | if file_name.endswith(".ilk") or file_name.endswith(".exp") or file_name.endswith(".pdb") or file_name.endswith(".bmp") or file_name.endswith(".log") or file_name.endswith(".lib") or file_name.endswith(".txt"):
41 | print(file_name)
42 | os.remove(file_name)
43 |
44 |
45 | def get_zip(dirpath, outFullName):
46 | """
47 | 压缩指定文件夹
48 | :param dirpath: 目标文件夹路径
49 | :param outFullName: 压缩文件保存路径+xxxx.zip
50 | :return: 无
51 | """
52 | zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
53 | for path, dirnames, filenames in os.walk(dirpath):
54 | # 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
55 | fpath = path.replace(dirpath, '')
56 |
57 | for filename in filenames:
58 | zip.write(os.path.join(path, filename),
59 | os.path.join(fpath, filename))
60 | zip.close()
61 |
62 |
63 | if __name__ == "__main__":
64 | # 1. Qt依赖环境放在里面
65 | os.system(install_path)
66 | # 2. 删除debug文件
67 | root_path = r"..\bin"
68 | file_list = []
69 | dir_list = []
70 | get_file_path(root_path, file_list, dir_list)
71 | delete_file(file_list)
72 | # 3.Log文件夹删除
73 | if os.path.exists("..\\bin\\Logs"):
74 | os.removedirs("..\\bin\\Logs")
75 | # 4.压缩文件夹
76 | if not os.path.exists("..\\package"):
77 | os.mkdir("..\\package")
78 | times= datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
79 | get_zip("..\\bin",f"..\\package\\{times}.zip")
80 | print(f"《----当前安装包..\\package\\{times}.zip打包成功----》")
81 | email_ = ["xxx@qq.com"] # 需要发送的邮箱地址
82 | cc_email = ["xxxx@qq.com"] # 需要抄送的邮箱地址
83 | res_url = cos_upload_file(f"..\\package\\{times}.zip")
84 | # 安装包下载链接:{res_url}
85 | send_email("",email_, cc_email, f"dtdt安装包 \n 打包时间:{times}\n 安装包下载链接: {res_url}","dtdt安装包")
86 | print(f"发送安装包到{email_}成功")
--------------------------------------------------------------------------------
/scripts/plugins_creator.py:
--------------------------------------------------------------------------------
1 | # 创建插件的脚本
2 | import os
3 | import os.path
4 |
5 |
6 |
7 | def create_plugin(plugin_name: str, save_folder: str, plugins_json: str = ""):
8 | """
9 | 创建插件
10 | plugin_name: 插件名称
11 | save_folder: 保存插件路径
12 | plugins_json: 插件json文件的路径
13 | """
14 | if plugin_name == "":
15 | return False, "插件名称不允许为空"
16 |
17 | if not os.path.exists(save_folder):
18 | return False, "保存的插件路径不存在"
19 |
20 | # 需要执行的步骤
21 | '''
22 | 1. 把文件名调整 plugins_name: xxxx
23 | 2.
24 | '''
25 | file_list = os.listdir("../scripts/")
26 | print(f"{file_list}")
27 | for file_path in file_list:
28 | if os.path.isdir(file_path):
29 | print(file_path)
30 | os.rename(file_path,"test_demo")
31 |
32 | create_plugin("sada","../scripts/")
33 |
--------------------------------------------------------------------------------
/scripts/requirements.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huifeng-kooboo/DT/149e07eda00b051d28a73e3d948ff6c9de4ebc08/scripts/requirements.txt
--------------------------------------------------------------------------------
/scripts/upload.py:
--------------------------------------------------------------------------------
1 | # -*- coding=utf-8
2 | # appid 已在配置中移除,请在参数 Bucket 中带上 appid。Bucket 由 BucketName-APPID 组成
3 | # 1. 设置用户配置, 包括 secretId,secretKey 以及 Region
4 | from qcloud_cos import CosConfig
5 | from qcloud_cos import CosS3Client
6 |
7 | __all__ = {'cos_upload_file'}
8 |
9 | # 此处的配置信息 需要去申请腾讯云cos服务中获取
10 | TX_COS_BUCKET_NAME = "xxxxx"
11 | TX_COS_REGION = 'xxxx'
12 | TX_COS_SECRETID = 'xxx'
13 | TX_COS_SECRETKEY = 'xxx'
14 |
15 | secret_id = TX_COS_SECRETID # 替换为用户的 secretId
16 | secret_key = TX_COS_SECRETKEY # 替换为用户的 secretKey
17 | region = TX_COS_REGION # 替换为用户的 Region
18 |
19 | token = None # 使用临时密钥需要传入 Token,默认为空,可不填
20 | scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填
21 | config = CosConfig(Region=region,
22 | SecretId=secret_id,
23 | SecretKey=secret_key,
24 | Token=token,
25 | Scheme=scheme)
26 | # 2. 获取客户端对象
27 | client = CosS3Client(config)
28 |
29 |
30 | def cos_upload_file(file_name, key_name=""):
31 | """
32 | 上传文件接口:
33 | return url:文件下载地址
34 | """
35 | if key_name == "":
36 | key_name = file_name
37 | client.upload_file(
38 | Bucket=TX_COS_BUCKET_NAME,
39 | LocalFilePath=file_name, # 本地文件的路径
40 | Key=key_name, # 上传到桶之后的文件名
41 | PartSize=1, # 上传分成几部分
42 | MAXThread=10, # 支持最多的线程数
43 | EnableMD5=False # 是否支持MD5
44 | )
45 | url = client.get_object_url(Bucket=TX_COS_BUCKET_NAME, Key=key_name)
46 | return url
--------------------------------------------------------------------------------