This commit is contained in:
Misaki
2026-06-10 00:57:54 +08:00
commit 7551a85abe
2805 changed files with 373529 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
cmake-build-debug
cmake-build-release
build
build_rk3566
# clion
/.idea
+59
View File
@@ -0,0 +1,59 @@
# C++ objects and libs
*.slo
*.lo
*.o
*.a
*.la
*.lai
*.so
*.so.*
*.dll
*.dylib
# Qt-es
object_script.*.Release
object_script.*.Debug
*_plugin_import.cpp
/.qmake.cache
/.qmake.stash
*.pro.user
*.pro.user.*
*.qbs.user
*.qbs.user.*
*.moc
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
*.qmlc
*.jsc
Makefile*
*build-*
*.qm
*.prl
# Qt unit tests
target_wrapper.*
# QtCreator
*.autosave
# QtCreator Qml
*.qmlproject.user
*.qmlproject.user.*
# QtCreator CMake
CMakeLists.txt.user*
# QtCreator 4.8< compilation database
compile_commands.json
# QtCreator local machine specific files for imported projects
*creator.user*
*_qmlcache.qrc
# CLion
/.idea
*.clang-format
/install
+27
View File
@@ -0,0 +1,27 @@
cmake_minimum_required(VERSION 3.5)
project(ElaWidgetTools VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(BUILD_ELAWIDGETTOOLS_EXAMPLE FALSE CACHE BOOL "Build Example")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
add_subdirectory(src)
if(BUILD_ELAWIDGETTOOLS_EXAMPLE)
add_subdirectory(example)
endif ()
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.ElaWidgetTools)
endif()
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Liniyous
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+100
View File
@@ -0,0 +1,100 @@
# ElaWidgetTools
## 简介
本项目是基于QT-Widget开发的FluentUI风格的组件库,同时提供不限于组件的常用集成功能;目前Main分支支持QT5.12以上所有版本(
Linux为QT5.15以上),推荐版本为QT6.4.3和QT6.6.2
## 重要提示
该项目项目性质原因,暂不接受任何PR!!!使用问题或BUG请直接进群反馈,都会及时处理,感谢您的支持! 企鹅群:850243692
## 支持平台
| [Windows][win-link] | [Ubuntu][ubuntu-link]
|---------------------|-----------------------|
| ![win-badge] | ![ubuntu-badge] |
[win-link]: https://github.com/Liniyous/ElaWidgetTools/actions?query=workflow%3AWindows "WindowsAction"
[win-badge]: https://img.shields.io/badge/Windows-Passing-61C263
[ubuntu-link]: https://github.com/Liniyous/ElaWidgetTools/actions?query=workflow%3AUbuntu "UbuntuAction"
[ubuntu-badge]: https://img.shields.io/badge/Ubuntu-Passing-61C263
## 主界面预览
<div align=center>
<img src="doc/preview/ElaWidgetTools_Light.png">
</div>
<div align=center>
<img src="doc/preview/ElaWidgetTools_Dark.png">
</div>
## 支持的组件
| 目录 | 说明 | 备注 |
|------------------------|--------------|----------------------------|
| ElaApplication | 程序初始化 | |
| ElaAppBar | 窗口顶部标题栏 | 支持拖动窗口,最小化、最大化、关闭窗口、调整窗口尺寸 |
| ElaAcrylicUrlCard | 带图片的交互式亚克力卡片 | 支持URL跳转 |
| ElaBreadcrumbBar | 面包屑组件 | 自动处理点击事件 |
| ElaCheckBox | 勾选框 | |
| ElaComboBox | 下拉框 | |
| ElaColorDialog | 颜色选择器 | |
| ElaCalendar | 日历视图 | |
| ElaCalendarPicker | 日期选择器 | |
| ElaMultiSelectComboBox | 多选下拉框 | |
| ElaContentDialog | 带遮罩的对话框 | |
| ElaDockWidget | 停靠窗口 | |
| ElaSpinBox | 微调框 | |
| ElaDoubleSpinBox | 微调框 | 浮点数 |
| ElaDxgiManager | DXGI采集器 | 支持自动选择采集设备 效率远高于原生采集 |
| ElaEventBus | 事件总线 | |
| ElaFlowLayout | 流式布局 | 支持动画 |
| ElaIcon | 图标 | |
| ElaIconButton | 图标按钮 | |
| ElaImageCard | 图片卡片 | |
| ElaInteractiveCard | 带图片的交互式透明卡片 | |
| ElaKeyBinder | 单按键绑定器 | |
| ElaLineEdit | 输入框 | |
| ElaListView | 列表视图 | |
| ElaLog | 消息日志 | |
| ElaMenu | 菜单 | |
| ElaMenuBar | 菜单栏 | |
| ElaMessageBar | 弹出式信息栏 | 支持八方向,锚定位置 |
| ElaMessageButton | 弹出信息按钮 | |
| ElaPivot | 轴转导航 | |
| ElaPlainTextEdit | 文本编辑框 | |
| ElaPushButton | 按钮 | |
| ElaPopularCard | 热门卡片 | |
| ElaProgressBar | 进度条 | |
| ElaPromotionCard | 促销卡片 | |
| ElaPromotionView | 促销卡片视窗 | |
| ElaSwitchButton | 切换按钮 | |
| ElaSuggestBox | 建议搜索框 | |
| ElaRadioButton | 单选按钮 | |
| ElaNavigationRouter | 路由跳转 | |
| ElaToggleSwitch | 开关按钮 | |
| ElaTabBar | 选项卡 | 谷歌浏览器风格 |
| ElaTabWidget | 选项卡页面 | 谷歌浏览器风格 |
| ElaTableView | 表格视图 | |
| ElaTreeView | 树型视图 | |
| ElaToolButton | 带下拉菜单的工具按钮 | |
| ElaToolBar | 工具栏 | |
| ElaTheme | 主题管理器 | |
| ElaReminderCard | 带图片的提醒卡片 | |
| ElaScrollbar | 滚动条 | |
| ElaScrollArea | 滚动区域 | 可设置鼠标拖动 |
| ElaScrollPage | 滚动页面 | 自带堆栈页面和面包屑导航 |
| ElaScrollPageArea | 滚动页面区域组件 | |
| ElaSlider | 拖动条 | |
| ElaStatusBar | 状态栏 | |
| ElaExponentialBlur | 指数模糊 | |
| ElaText | Text文本 | |
| ElaGraphicsScene | 高级场景 | 大量实用API |
| ElaGraphicsView | 高级视图 | 按键缩放、拖动 |
| ElaGraphicsItem | 高级图元 | 大量实用API |
| ElaWindow | 带导航栏的无边框窗口 | |
| ElaWidget | 无边框模态窗口 | |
+108
View File
@@ -0,0 +1,108 @@
cmake_minimum_required(VERSION 3.5)
project(ElaWidgetToolsExample VERSION 0.1 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
FILE(GLOB ORIGIN *.cpp *.h)
FILE(GLOB MODELVIEW ModelView/*.h ModelView/*.cpp)
FILE(GLOB EAXMPLEPAGE ExamplePage/*.h ExamplePage/*.cpp)
source_group(ModelView FILES ${MODELVIEW})
source_group(ExamplePage FILES ${EAXMPLEPAGE})
set(PROJECT_SOURCES
${ORIGIN}
${MODELVIEW}
${EAXMPLEPAGE}
)
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(ElaWidgetToolsExample
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
#遍历所有资源文件
file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp *.js)
foreach (filepath ${RES_PATHS})
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath})
list(APPEND resource_files ${filename})
endforeach (filepath)
qt_add_resources(${PROJECT_NAME} "ElaWidgetToolsExample"
RESOURCES PREFIX "/"
FILES
${resource_files}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET ElaWidgetToolsExample APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else ()
if (ANDROID)
add_library(ElaWidgetToolsExample SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else ()
qt5_add_big_resources(PROJECT_SOURCES
../src/include/ElaWidgetTools.qrc
ElaWidgetToolsExample.qrc
)
add_executable(ElaWidgetToolsExample
${PROJECT_SOURCES}
)
endif ()
endif ()
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/install/lib/cmake/)
find_package(ElaWidgetTools REQUIRED)
if (ELAWIDGETTOOLS_FOUND)
message(STATUS "ELAWIDGETTOOLS_INCLUDE_DIR = ${ELAWIDGETTOOLS_INCLUDE_DIRS}")
message(STATUS "ELAWIDGETTOOLS_LIBRARIES = ${ELAWIDGETTOOLS_LIBRARIES}")
message(STATUS "ELAWIDGETTOOLS_LIB_DIR = ${ELAWIDGETTOOLS_LIBRARY_DIRS}")
endif ()
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
target_include_directories(ElaWidgetToolsExample PUBLIC
${ELAWIDGETTOOLS_INCLUDE_DIRS}
ExamplePage
ModelView
)
target_link_libraries(ElaWidgetToolsExample PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
ElaWidgetTools
)
target_link_directories(ElaWidgetToolsExample PUBLIC
${ELAWIDGETTOOLS_LIBRARY_DIRS}
)
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if (${QT_VERSION} VERSION_LESS 6.1.0)
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.ElaWidgetToolsExample)
endif ()
set_target_properties(ElaWidgetToolsExample PROPERTIES
${BUNDLE_ID_OPTION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
if (QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(ElaWidgetToolsExample)
endif ()
@@ -0,0 +1,124 @@
<RCC>
<qresource prefix="/">
<file>Resource/Image/control/Acrylic.png</file>
<file>Resource/Image/control/AnimatedIcon.png</file>
<file>Resource/Image/control/AnimatedVisualPlayer.png</file>
<file>Resource/Image/control/AnimationInterop.png</file>
<file>Resource/Image/control/AppBarButton.png</file>
<file>Resource/Image/control/AppBarSeparator.png</file>
<file>Resource/Image/control/AppBarToggleButton.png</file>
<file>Resource/Image/control/AutomationProperties.png</file>
<file>Resource/Image/control/AutoSuggestBox.png</file>
<file>Resource/Image/control/Border.png</file>
<file>Resource/Image/control/BreadcrumbBar.png</file>
<file>Resource/Image/control/Button.png</file>
<file>Resource/Image/control/CalendarDatePicker.png</file>
<file>Resource/Image/control/CalendarView.png</file>
<file>Resource/Image/control/Canvas.png</file>
<file>Resource/Image/control/Checkbox.png</file>
<file>Resource/Image/control/Clipboard.png</file>
<file>Resource/Image/control/ColorPaletteResources.png</file>
<file>Resource/Image/control/ColorPicker.png</file>
<file>Resource/Image/control/ComboBox.png</file>
<file>Resource/Image/control/CommandBar.png</file>
<file>Resource/Image/control/CommandBarFlyout.png</file>
<file>Resource/Image/control/CompactSizing.png</file>
<file>Resource/Image/control/ConnectedAnimation.png</file>
<file>Resource/Image/control/ContentDialog.png</file>
<file>Resource/Image/control/CreateMultipleWindows.png</file>
<file>Resource/Image/control/DataGrid.png</file>
<file>Resource/Image/control/DatePicker.png</file>
<file>Resource/Image/control/DropDownButton.png</file>
<file>Resource/Image/control/EasingFunction.png</file>
<file>Resource/Image/control/Expander.png</file>
<file>Resource/Image/control/FilePicker.png</file>
<file>Resource/Image/control/FlipView.png</file>
<file>Resource/Image/control/Flyout.png</file>
<file>Resource/Image/control/Grid.png</file>
<file>Resource/Image/control/GridView.png</file>
<file>Resource/Image/control/HyperlinkButton.png</file>
<file>Resource/Image/control/IconElement.png</file>
<file>Resource/Image/control/Image.png</file>
<file>Resource/Image/control/ImplicitTransition.png</file>
<file>Resource/Image/control/InfoBadge.png</file>
<file>Resource/Image/control/InfoBar.png</file>
<file>Resource/Image/control/InkCanvas.png</file>
<file>Resource/Image/control/InkToolbar.png</file>
<file>Resource/Image/control/InputValidation.png</file>
<file>Resource/Image/control/ItemsRepeater.png</file>
<file>Resource/Image/control/Line.png</file>
<file>Resource/Image/control/ListBox.png</file>
<file>Resource/Image/control/ListView.png</file>
<file>Resource/Image/control/MediaPlayerElement.png</file>
<file>Resource/Image/control/MenuBar.png</file>
<file>Resource/Image/control/MenuFlyout.png</file>
<file>Resource/Image/control/NavigationView.png</file>
<file>Resource/Image/control/NumberBox.png</file>
<file>Resource/Image/control/PageTransition.png</file>
<file>Resource/Image/control/ParallaxView.png</file>
<file>Resource/Image/control/PasswordBox.png</file>
<file>Resource/Image/control/PersonPicture.png</file>
<file>Resource/Image/control/PipsPager.png</file>
<file>Resource/Image/control/Pivot.png</file>
<file>Resource/Image/control/ProgressBar.png</file>
<file>Resource/Image/control/ProgressRing.png</file>
<file>Resource/Image/control/PullToRefresh.png</file>
<file>Resource/Image/control/RadialGradientBrush.png</file>
<file>Resource/Image/control/RadioButton.png</file>
<file>Resource/Image/control/RadioButtons.png</file>
<file>Resource/Image/control/RatingControl.png</file>
<file>Resource/Image/control/RelativePanel.png</file>
<file>Resource/Image/control/RepeatButton.png</file>
<file>Resource/Image/control/RevealFocus.png</file>
<file>Resource/Image/control/RichEditBox.png</file>
<file>Resource/Image/control/RichTextBlock.png</file>
<file>Resource/Image/control/ScrollViewer.png</file>
<file>Resource/Image/control/SemanticZoom.png</file>
<file>Resource/Image/control/Shape.png</file>
<file>Resource/Image/control/Slider.png</file>
<file>Resource/Image/control/Sound.png</file>
<file>Resource/Image/control/SplitButton.png</file>
<file>Resource/Image/control/SplitView.png</file>
<file>Resource/Image/control/StackPanel.png</file>
<file>Resource/Image/control/StandardUICommand.png</file>
<file>Resource/Image/control/SwipeControl.png</file>
<file>Resource/Image/control/TabView.png</file>
<file>Resource/Image/control/TeachingTip.png</file>
<file>Resource/Image/control/TextBlock.png</file>
<file>Resource/Image/control/TextBox.png</file>
<file>Resource/Image/control/ThemeTransition.png</file>
<file>Resource/Image/control/TimePicker.png</file>
<file>Resource/Image/control/TitleBar.png</file>
<file>Resource/Image/control/ToggleButton.png</file>
<file>Resource/Image/control/ToggleSplitButton.png</file>
<file>Resource/Image/control/ToggleSwitch.png</file>
<file>Resource/Image/control/ToolTip.png</file>
<file>Resource/Image/control/TreeView.png</file>
<file>Resource/Image/control/VariableSizedWrapGrid.png</file>
<file>Resource/Image/control/Viewbox.png</file>
<file>Resource/Image/control/WebView.png</file>
<file>Resource/Image/control/XamlUICommand.png</file>
<file>Resource/Image/Cirno.jpg</file>
<file>Resource/Image/github.png</file>
<file>Resource/Image/Home_Background.png</file>
<file>Resource/Image/Moon.jpg</file>
<file>Resource/Image/Card/beach.png</file>
<file>Resource/Image/Card/classroom.png</file>
<file>Resource/Image/Card/dream.png</file>
<file>Resource/Image/Card/miku.png</file>
<file>Resource/Image/IARC/IARC_12+.svg.png</file>
<file>Resource/Image/IARC/IARC_16+.svg.png</file>
<file>Resource/Image/IARC/IARC_18+.svg.png</file>
<file>Resource/Image/IARC/IARC_3+.svg.png</file>
<file>Resource/Image/IARC/IARC_7+.svg.png</file>
<file>Resource/Image/Model/CollapsingWorld.jpg</file>
<file>Resource/Image/Model/DarkForest.jpg</file>
<file>Resource/Image/Model/LASTSTARDUST.jpg</file>
<file>Resource/Image/Model/Light.jpg</file>
<file>Resource/Image/Model/MaVieEnRose.jpg</file>
<file>Resource/Image/Model/NaightNavigationStar.jpg</file>
<file>Resource/Image/Model/RainMan.jpg</file>
<file>Resource/Image/Model/RunningInTheDark.jpg</file>
<file>Resource/Image/Model/STYXHELIX.jpg</file>
</qresource>
</RCC>
+73
View File
@@ -0,0 +1,73 @@
#include "T_About.h"
#include <QHBoxLayout>
#include <QIcon>
#include <QVBoxLayout>
#include "ElaImageCard.h"
#include "ElaText.h"
T_About::T_About(QWidget* parent)
: ElaWidget(parent)
{
setWindowTitle("关于..");
setWindowIcon(QIcon(":/include/Image/Moon.jpg"));
this->setIsFixedSize(true);
setWindowModality(Qt::ApplicationModal);
setWindowButtonFlags(ElaAppBarType::CloseButtonHint);
ElaImageCard* pixCard = new ElaImageCard(this);
pixCard->setFixedSize(60, 60);
pixCard->setIsPreserveAspectCrop(false);
pixCard->setCardImage(QImage(":/include/Image/Moon.jpg"));
QVBoxLayout* pixCardLayout = new QVBoxLayout();
pixCardLayout->addWidget(pixCard);
pixCardLayout->addStretch();
ElaText* versionText = new ElaText("ElaWidgetTools-LK-2024", this);
QFont versionTextFont = versionText->font();
versionTextFont.setWeight(QFont::Bold);
versionText->setFont(versionTextFont);
versionText->setWordWrap(false);
versionText->setTextPixelSize(18);
ElaText* licenseText = new ElaText("MIT授权协议", this);
licenseText->setWordWrap(false);
licenseText->setTextPixelSize(14);
ElaText* supportText = new ElaText("Windows支持版本: QT5.12以上\nLinux支持版本: Qt5.14以上", this);
supportText->setWordWrap(false);
supportText->setTextPixelSize(14);
ElaText* contactText = new ElaText("作者: 8009963@qq.com\n交流群: 850243692(QQ)", this);
contactText->setWordWrap(false);
contactText->setTextInteractionFlags(Qt::TextSelectableByMouse);
contactText->setTextPixelSize(14);
ElaText* helperText = new ElaText("用户手册及API文档付费提供\n提供额外的专业技术支持", this);
helperText->setWordWrap(false);
helperText->setTextPixelSize(14);
ElaText* copyrightText = new ElaText("版权所有 © 2024 Liniyous", this);
copyrightText->setWordWrap(false);
copyrightText->setTextPixelSize(14);
QVBoxLayout* textLayout = new QVBoxLayout();
textLayout->setSpacing(15);
textLayout->addWidget(versionText);
textLayout->addWidget(licenseText);
textLayout->addWidget(supportText);
textLayout->addWidget(contactText);
textLayout->addWidget(helperText);
textLayout->addWidget(copyrightText);
textLayout->addStretch();
QHBoxLayout* contentLayout = new QHBoxLayout();
contentLayout->addSpacing(30);
contentLayout->addLayout(pixCardLayout);
contentLayout->addSpacing(30);
contentLayout->addLayout(textLayout);
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(0, 25, 0, 0);
mainLayout->addLayout(contentLayout);
}
T_About::~T_About()
{
}
+14
View File
@@ -0,0 +1,14 @@
#ifndef T_ABOUT_H
#define T_ABOUT_H
#include <ElaWidget.h>
class T_About : public ElaWidget
{
Q_OBJECT
public:
explicit T_About(QWidget* parent = nullptr);
~T_About();
};
#endif // T_ABOUT_H
@@ -0,0 +1,284 @@
#include "T_BaseComponents.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "ElaCheckBox.h"
#include "ElaComboBox.h"
#include "ElaMessageButton.h"
#include "ElaMultiSelectComboBox.h"
#include "ElaPlainTextEdit.h"
#include "ElaProgressBar.h"
#include "ElaRadioButton.h"
#include "ElaScrollPageArea.h"
#include "ElaSlider.h"
#include "ElaSpinBox.h"
#include "ElaText.h"
#include "ElaToggleButton.h"
#include "ElaToggleSwitch.h"
T_BaseComponents::T_BaseComponents(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaBaseComponents");
// 顶部元素
createCustomWidget("一些常用的基础组件被放置于此,可在此界面体验其效果并按需添加进项目中");
_toggleSwitch = new ElaToggleSwitch(this);
ElaScrollPageArea* toggleSwitchArea = new ElaScrollPageArea(this);
QHBoxLayout* toggleSwitchLayout = new QHBoxLayout(toggleSwitchArea);
ElaText* toggleSwitchText = new ElaText("ElaToggleSwitch", this);
toggleSwitchText->setTextPixelSize(15);
toggleSwitchLayout->addWidget(toggleSwitchText);
toggleSwitchLayout->addWidget(_toggleSwitch);
toggleSwitchLayout->addStretch();
ElaToggleSwitch* toggleSwitchDisableSwitch = new ElaToggleSwitch(this);
ElaText* toggleSwitchDisableText = new ElaText("禁用", this);
toggleSwitchDisableText->setTextPixelSize(15);
connect(toggleSwitchDisableSwitch, &ElaToggleSwitch::toggled, this, [=](bool checked) {
_toggleSwitch->setDisabled(checked);
});
toggleSwitchLayout->addWidget(toggleSwitchDisableSwitch);
toggleSwitchLayout->addWidget(toggleSwitchDisableText);
toggleSwitchLayout->addSpacing(10);
_toggleButton = new ElaToggleButton("ToggleButton", this);
_toggleButton->setFixedWidth(120);
ElaScrollPageArea* toggleButtonArea = new ElaScrollPageArea(this);
QHBoxLayout* toggleButtonLayout = new QHBoxLayout(toggleButtonArea);
ElaText* toggleButtonText = new ElaText("ElaToggleButton", this);
toggleButtonText->setTextPixelSize(15);
toggleButtonLayout->addWidget(toggleButtonText);
toggleButtonLayout->addWidget(_toggleButton);
toggleButtonLayout->addStretch();
ElaToggleSwitch* toggleButtonDisableSwitch = new ElaToggleSwitch(this);
ElaText* toggleButtonDisableText = new ElaText("禁用", this);
toggleButtonDisableText->setTextPixelSize(15);
connect(toggleButtonDisableSwitch, &ElaToggleSwitch::toggled, this, [=](bool checked) {
_toggleButton->setDisabled(checked);
});
toggleButtonLayout->addWidget(toggleButtonDisableSwitch);
toggleButtonLayout->addWidget(toggleButtonDisableText);
toggleButtonLayout->addSpacing(10);
_comboBox = new ElaComboBox(this);
QStringList comboList{
"我愿投身前途未卜的群星",
"潜行 步伐小心翼翼",
"不留游走痕迹",
"如同一簇幽灵",
"所谓 道德加上伦理",
"抱歉只能律己"};
_comboBox->addItems(comboList);
ElaScrollPageArea* comboBoxArea = new ElaScrollPageArea(this);
QHBoxLayout* comboBoxLayout = new QHBoxLayout(comboBoxArea);
ElaText* comboBoxText = new ElaText("ElaComboBox", this);
comboBoxText->setTextPixelSize(15);
comboBoxLayout->addWidget(comboBoxText);
comboBoxLayout->addWidget(_comboBox);
comboBoxLayout->addStretch();
ElaToggleSwitch* comboBoxDisableSwitch = new ElaToggleSwitch(this);
ElaText* comboBoxDisableText = new ElaText("禁用", this);
comboBoxDisableText->setTextPixelSize(15);
connect(comboBoxDisableSwitch, &ElaToggleSwitch::toggled, this, [=](bool checked) {
_comboBox->setDisabled(checked);
});
comboBoxLayout->addWidget(comboBoxDisableSwitch);
comboBoxLayout->addWidget(comboBoxDisableText);
comboBoxLayout->addSpacing(10);
_multiSelectComboBox = new ElaMultiSelectComboBox(this);
QStringList multiComboList{"执念的鱼", "提着灯闯过远洋的甄选", "继续下潜", "无需誓言", "我的心像自沉的旧母舰", "没入深渊", "我曾凝望曾是航向的日出"};
QStringList multiSelectComboList{"执念的鱼", "提着灯闯过远洋的甄选", "无需誓言", "我的心像自沉的旧母舰"};
_multiSelectComboBox->addItems(multiComboList);
_multiSelectComboBox->setCurrentSelection(multiSelectComboList);
ElaScrollPageArea* multiSelectComboBoxArea = new ElaScrollPageArea(this);
QHBoxLayout* multiSelectComboBoxLayout = new QHBoxLayout(multiSelectComboBoxArea);
ElaText* multiSelectComboBoxText = new ElaText("ElaMutilSelectComboBox", this);
multiSelectComboBoxText->setTextPixelSize(15);
multiSelectComboBoxLayout->addWidget(multiSelectComboBoxText);
multiSelectComboBoxLayout->addWidget(_multiSelectComboBox);
multiSelectComboBoxLayout->addStretch();
ElaToggleSwitch* multiSelectComboBoxDisableSwitch = new ElaToggleSwitch(this);
ElaText* multiSelectComboBoxDisableText = new ElaText("禁用", this);
multiSelectComboBoxDisableText->setTextPixelSize(15);
connect(multiSelectComboBoxDisableSwitch, &ElaToggleSwitch::toggled, this, [=](bool checked) {
_multiSelectComboBox->setDisabled(checked);
});
multiSelectComboBoxLayout->addWidget(multiSelectComboBoxDisableSwitch);
multiSelectComboBoxLayout->addWidget(multiSelectComboBoxDisableText);
multiSelectComboBoxLayout->addSpacing(10);
_messageButton = new ElaMessageButton("Success", this);
_messageButton->setBarTitle("Success");
_messageButton->setBarText("点燃星 亲手点燃黑暗森林的火星 蒙昧初醒 而我却 轻声告别这新生的黎明");
_infoMessageButton = new ElaMessageButton("Info", this);
_infoMessageButton->setBarTitle("Information");
_infoMessageButton->setBarText("点燃星 亲手点燃黑暗森林的火星 蒙昧初醒 而我却 轻声告别这新生的黎明");
_infoMessageButton->setMessageMode(ElaMessageBarType::Information);
_infoMessageButton->setPositionPolicy(ElaMessageBarType::TopLeft);
_warningMessageButton = new ElaMessageButton("Warning", this);
_warningMessageButton->setBarTitle("Warning");
_warningMessageButton->setBarText("点燃星 亲手点燃黑暗森林的火星 蒙昧初醒 而我却 轻声告别这新生的黎明");
_warningMessageButton->setMessageMode(ElaMessageBarType::Warning);
_warningMessageButton->setPositionPolicy(ElaMessageBarType::BottomLeft);
_errorMessageButton = new ElaMessageButton("Error", this);
_errorMessageButton->setBarTitle("Error");
_errorMessageButton->setBarText("点燃星 亲手点燃黑暗森林的火星 蒙昧初醒 而我却 轻声告别这新生的黎明");
_errorMessageButton->setMessageMode(ElaMessageBarType::Error);
_errorMessageButton->setPositionPolicy(ElaMessageBarType::BottomRight);
ElaScrollPageArea* messageButtonArea = new ElaScrollPageArea(this);
QHBoxLayout* messageButtonLayout = new QHBoxLayout(messageButtonArea);
ElaText* messageButtonText = new ElaText("ElaMessageButton", this);
messageButtonText->setTextPixelSize(15);
messageButtonLayout->addWidget(messageButtonText);
messageButtonLayout->addWidget(_messageButton);
messageButtonLayout->addWidget(_infoMessageButton);
messageButtonLayout->addWidget(_warningMessageButton);
messageButtonLayout->addWidget(_errorMessageButton);
messageButtonLayout->addStretch();
ElaToggleSwitch* messageButtonDisableSwitch = new ElaToggleSwitch(this);
ElaText* messageButtonDisableText = new ElaText("禁用", this);
messageButtonDisableText->setTextPixelSize(15);
connect(messageButtonDisableSwitch, &ElaToggleSwitch::toggled, this, [=](bool checked) {
_messageButton->setDisabled(checked);
_infoMessageButton->setDisabled(checked);
_warningMessageButton->setDisabled(checked);
_errorMessageButton->setDisabled(checked);
});
messageButtonLayout->addWidget(messageButtonDisableSwitch);
messageButtonLayout->addWidget(messageButtonDisableText);
messageButtonLayout->addSpacing(10);
_checkBox = new ElaCheckBox("CheckBox", this);
ElaScrollPageArea* checkBoxArea = new ElaScrollPageArea(this);
QHBoxLayout* checkBoxLayout = new QHBoxLayout(checkBoxArea);
ElaText* checkBoxText = new ElaText("ElacheckBox", this);
checkBoxText->setTextPixelSize(15);
checkBoxLayout->addWidget(checkBoxText);
checkBoxLayout->addWidget(_checkBox);
checkBoxLayout->addStretch();
ElaToggleSwitch* checkBoxDisableSwitch = new ElaToggleSwitch(this);
ElaText* checkBoxDisableText = new ElaText("禁用", this);
checkBoxDisableText->setTextPixelSize(15);
connect(checkBoxDisableSwitch, &ElaToggleSwitch::toggled, this, [=](bool checked) {
_checkBox->setDisabled(checked);
});
checkBoxLayout->addWidget(checkBoxDisableSwitch);
checkBoxLayout->addWidget(checkBoxDisableText);
checkBoxLayout->addSpacing(10);
_spinBox = new ElaSpinBox(this);
ElaScrollPageArea* spinBoxArea = new ElaScrollPageArea(this);
QHBoxLayout* spinBoxLayout = new QHBoxLayout(spinBoxArea);
ElaText* spinBoxText = new ElaText("ElaSpinBox", this);
spinBoxText->setTextPixelSize(15);
spinBoxLayout->addWidget(spinBoxText);
spinBoxLayout->addWidget(_spinBox);
spinBoxLayout->addStretch();
_slider = new ElaSlider(this);
ElaScrollPageArea* sliderArea = new ElaScrollPageArea(this);
QHBoxLayout* sliderLayout = new QHBoxLayout(sliderArea);
ElaText* sliderText = new ElaText("ElaSlider", this);
sliderText->setTextPixelSize(15);
sliderLayout->addWidget(sliderText);
sliderLayout->addWidget(_slider);
sliderLayout->addStretch();
_radioButton = new ElaRadioButton("RadioButton", this);
ElaScrollPageArea* radioButtonArea = new ElaScrollPageArea(this);
QHBoxLayout* radioButtonLayout = new QHBoxLayout(radioButtonArea);
ElaText* radioButtonText = new ElaText("ElaRadioButton", this);
radioButtonText->setTextPixelSize(15);
radioButtonLayout->addWidget(radioButtonText);
radioButtonLayout->addWidget(_radioButton);
radioButtonLayout->addStretch();
_progressBar = new ElaProgressBar(this);
_progressBar->setMinimum(0);
_progressBar->setMaximum(0);
ElaScrollPageArea* progressBarArea = new ElaScrollPageArea(this);
QHBoxLayout* progressBarLayout = new QHBoxLayout(progressBarArea);
ElaText* progressBarText = new ElaText("ElaProgressBar", this);
progressBarText->setTextPixelSize(15);
progressBarLayout->addWidget(progressBarText);
progressBarLayout->addWidget(_progressBar);
progressBarLayout->addStretch();
ElaPlainTextEdit* edit = new ElaPlainTextEdit(this);
edit->setPlainText("这是一个ElaPlainTextEdit 暂时放在这里");
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaBaseComponents");
QVBoxLayout* centerLayout = new QVBoxLayout(centralWidget);
centerLayout->addWidget(toggleSwitchArea);
centerLayout->addWidget(toggleButtonArea);
centerLayout->addWidget(comboBoxArea);
centerLayout->addWidget(multiSelectComboBoxArea);
centerLayout->addWidget(messageButtonArea);
centerLayout->addWidget(checkBoxArea);
centerLayout->addWidget(spinBoxArea);
centerLayout->addWidget(sliderArea);
centerLayout->addWidget(radioButtonArea);
centerLayout->addWidget(progressBarArea);
centerLayout->addWidget(edit);
centerLayout->addStretch();
centerLayout->setContentsMargins(0, 0, 0, 0);
addCentralWidget(centralWidget, true, true, 0);
ElaText* homeStack1 = new ElaText("HomeStack1", this);
QFont font = homeStack1->font();
font.setPixelSize(32);
homeStack1->setFont(font);
homeStack1->setAlignment(Qt::AlignCenter);
homeStack1->setWindowTitle("HomeStack1");
addCentralWidget(homeStack1);
ElaText* homeStack2 = new ElaText("HomeStack2", this);
homeStack2->setFont(font);
homeStack2->setAlignment(Qt::AlignCenter);
homeStack2->setWindowTitle("HomeStack2");
addCentralWidget(homeStack2);
}
T_BaseComponents::~T_BaseComponents()
{
}
void T_BaseComponents::mouseReleaseEvent(QMouseEvent* event)
{
switch (event->button())
{
case Qt::LeftButton:
{
//ElaMessageBar::success(ElaMessageBarType::TopRight, "Success", "Never Close Your Eyes", 2500);
//ElaMessageBar::success(ElaMessageBarType::TopRight, "Success", "Never Close Your Eyes", 1500);
break;
}
case Qt::BackButton:
{
this->navigation(0);
break;
}
case Qt::ForwardButton:
{
this->navigation(1);
break;
}
case Qt::MiddleButton:
{
this->navigation(2);
break;
}
default:
{
break;
}
}
ElaScrollPage::mouseReleaseEvent(event);
}
@@ -0,0 +1,42 @@
#ifndef T_BASECOMPONENTS_H
#define T_BASECOMPONENTS_H
#include "T_BasePage.h"
class ElaToggleSwitch;
class ElaToggleButton;
class ElaComboBox;
class ElaMultiSelectComboBox;
class ElaMessageButton;
class ElaCheckBox;
class ElaSpinBox;
class ElaSlider;
class ElaRadioButton;
class ElaProgressBar;
class T_BaseComponents : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_BaseComponents(QWidget* parent = nullptr);
~T_BaseComponents();
protected:
virtual void mouseReleaseEvent(QMouseEvent* event);
private:
ElaToggleSwitch* _toggleSwitch{nullptr};
ElaToggleButton* _toggleButton{nullptr};
ElaComboBox* _comboBox{nullptr};
ElaMultiSelectComboBox* _multiSelectComboBox{nullptr};
ElaMessageButton* _messageButton{nullptr};
ElaMessageButton* _infoMessageButton{nullptr};
ElaMessageButton* _warningMessageButton{nullptr};
ElaMessageButton* _errorMessageButton{nullptr};
ElaCheckBox* _checkBox{nullptr};
ElaSpinBox* _spinBox{nullptr};
ElaSlider* _slider{nullptr};
ElaRadioButton* _radioButton{nullptr};
ElaProgressBar* _progressBar{nullptr};
};
#endif // T_BASECOMPONENTS_H
@@ -0,0 +1,85 @@
#include "T_BasePage.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "ElaMenu.h"
#include "ElaText.h"
#include "ElaTheme.h"
#include "ElaToolButton.h"
T_BasePage::T_BasePage(QWidget* parent)
: ElaScrollPage(parent)
{
connect(eTheme, &ElaTheme::themeModeChanged, this, [=]() {
if (!parent)
{
update();
}
});
}
T_BasePage::~T_BasePage()
{
}
void T_BasePage::createCustomWidget(QString desText)
{
// 顶部元素
QWidget* customWidget = new QWidget(this);
ElaText* subTitleText = new ElaText(this);
subTitleText->setText("https://github.com/Liniyous/ElaWidgetTools");
subTitleText->setTextInteractionFlags(Qt::TextSelectableByMouse);
subTitleText->setTextPixelSize(11);
ElaToolButton* documentationButton = new ElaToolButton(this);
documentationButton->setFixedHeight(35);
documentationButton->setIsTransparent(false);
documentationButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
//_toolButton->setPopupMode(QToolButton::MenuButtonPopup);
documentationButton->setText("Documentation");
documentationButton->setElaIcon(ElaIconType::FileDoc);
ElaMenu* documentationMenu = new ElaMenu(this);
documentationMenu->addElaIconAction(ElaIconType::CardsBlank, "CardsBlank");
documentationMenu->addElaIconAction(ElaIconType::EarthAmericas, "EarthAmericas");
documentationButton->setMenu(documentationMenu);
ElaToolButton* sourceButton = new ElaToolButton(this);
sourceButton->setFixedHeight(35);
sourceButton->setIsTransparent(false);
sourceButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
sourceButton->setText("Source");
sourceButton->setElaIcon(ElaIconType::NfcSymbol);
ElaMenu* sourceMenu = new ElaMenu(this);
sourceMenu->addElaIconAction(ElaIconType::FireBurner, "FireBurner");
sourceMenu->addElaIconAction(ElaIconType::Galaxy, "Galaxy~~~~");
sourceButton->setMenu(sourceMenu);
ElaToolButton* themeButton = new ElaToolButton(this);
themeButton->setFixedSize(35, 35);
themeButton->setIsTransparent(false);
themeButton->setElaIcon(ElaIconType::MoonStars);
connect(themeButton, &ElaToolButton::clicked, this, [=]() {
eTheme->setThemeMode(eTheme->getThemeMode() == ElaThemeType::Light ? ElaThemeType::Dark : ElaThemeType::Light);
});
QHBoxLayout* buttonLayout = new QHBoxLayout();
buttonLayout->addWidget(documentationButton);
buttonLayout->addSpacing(5);
buttonLayout->addWidget(sourceButton);
buttonLayout->addStretch();
buttonLayout->addWidget(themeButton);
buttonLayout->addSpacing(15);
ElaText* descText = new ElaText(this);
descText->setText(desText);
descText->setTextPixelSize(13);
QVBoxLayout* topLayout = new QVBoxLayout(customWidget);
topLayout->setContentsMargins(0, 0, 0, 0);
topLayout->addWidget(subTitleText);
topLayout->addSpacing(5);
topLayout->addLayout(buttonLayout);
topLayout->addSpacing(5);
topLayout->addWidget(descText);
setCustomWidget(customWidget);
}
@@ -0,0 +1,18 @@
#ifndef T_BASEPAGE_H
#define T_BASEPAGE_H
#include <ElaScrollPage.h>
class QVBoxLayout;
class T_BasePage : public ElaScrollPage
{
Q_OBJECT
public:
explicit T_BasePage(QWidget* parent = nullptr);
~T_BasePage();
protected:
void createCustomWidget(QString desText);
};
#endif // T_BASEPAGE_H
+83
View File
@@ -0,0 +1,83 @@
#include "T_Card.h"
#include <QVBoxLayout>
#include "ElaLCDNumber.h"
#include "ElaPromotionCard.h"
#include "ElaPromotionView.h"
T_Card::T_Card(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaCard");
// 顶部元素
createCustomWidget("一些常用的卡片组件被放置于此,可在此界面体验其效果并按需添加进项目中");
_lcdNumber = new ElaLCDNumber(this);
_lcdNumber->setIsUseAutoClock(true);
_lcdNumber->setIsTransparent(false);
// _lcdNumber->setAutoClockFormat("hh:mm:ss");
_lcdNumber->setFixedHeight(100);
_promotionCard = new ElaPromotionCard(this);
_promotionCard->setFixedSize(600, 300);
_promotionCard->setCardPixmap(QPixmap(":/Resource/Image/Card/miku.png"));
_promotionCard->setCardTitle("MiKu");
_promotionCard->setPromotionTitle("SONG~");
_promotionCard->setTitle("STYX HELIX");
_promotionCard->setSubTitle("Never close your eyes, Searching for a true fate");
_promotionView = new ElaPromotionView(this);
ElaPromotionCard* exampleCard1 = new ElaPromotionCard(this);
exampleCard1->setCardPixmap(QPixmap(":/Resource/Image/Card/miku.png"));
exampleCard1->setCardTitle("MiKu");
exampleCard1->setPromotionTitle("SONG~");
exampleCard1->setTitle("STYX HELIX");
exampleCard1->setSubTitle("Never close your eyes, Searching for a true fate");
ElaPromotionCard* exampleCard2 = new ElaPromotionCard(this);
exampleCard2->setCardPixmap(QPixmap(":/Resource/Image/Card/beach.png"));
exampleCard2->setCardTitle("Beach");
exampleCard2->setPromotionTitle("SONG~");
exampleCard2->setTitle("STYX HELIX");
exampleCard2->setSubTitle("Never close your eyes, Searching for a true fate");
ElaPromotionCard* exampleCard3 = new ElaPromotionCard(this);
exampleCard3->setCardPixmap(QPixmap(":/Resource/Image/Card/dream.png"));
exampleCard3->setCardTitle("Dream");
exampleCard3->setPromotionTitle("SONG~");
exampleCard3->setTitle("STYX HELIX");
exampleCard3->setSubTitle("Never close your eyes, Searching for a true fate");
ElaPromotionCard* exampleCard4 = new ElaPromotionCard(this);
exampleCard4->setCardPixmap(QPixmap(":/Resource/Image/Card/classroom.png"));
exampleCard4->setCardTitle("Classroom");
exampleCard4->setPromotionTitle("SONG~");
exampleCard4->setTitle("STYX HELIX");
exampleCard4->setSubTitle("Never close your eyes, Searching for a true fate");
_promotionView->appendPromotionCard(exampleCard1);
_promotionView->appendPromotionCard(exampleCard2);
_promotionView->appendPromotionCard(exampleCard3);
_promotionView->appendPromotionCard(exampleCard4);
_promotionView->setIsAutoScroll(true);
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaCard");
QVBoxLayout* centerLayout = new QVBoxLayout(centralWidget);
centerLayout->setContentsMargins(0, 0, 0, 0);
centerLayout->addWidget(_lcdNumber);
centerLayout->addSpacing(20);
centerLayout->addWidget(_promotionCard);
centerLayout->addSpacing(20);
centerLayout->addWidget(_promotionView);
centerLayout->addSpacing(100);
centerLayout->addStretch();
addCentralWidget(centralWidget, true, true, 0);
}
T_Card::~T_Card()
{
}
+22
View File
@@ -0,0 +1,22 @@
#ifndef T_CARD_H
#define T_CARD_H
#include "T_BasePage.h"
class ElaLCDNumber;
class ElaPromotionCard;
class ElaPromotionView;
class T_Card : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_Card(QWidget* parent = nullptr);
~T_Card();
private:
ElaLCDNumber* _lcdNumber{nullptr};
ElaPromotionCard* _promotionCard{nullptr};
ElaPromotionView* _promotionView{nullptr};
};
#endif // T_CARD_H
@@ -0,0 +1,86 @@
#include "T_ElaScreen.h"
#include "ElaToggleButton.h"
#ifdef Q_OS_WIN
#include <QVBoxLayout>
#include "ElaComboBox.h"
#include "ElaDxgiManager.h"
#include "ElaText.h"
T_ElaScreen::T_ElaScreen(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaScreen");
// 顶部元素
createCustomWidget("DXGI录制组件被放置于此,可在此界面预览录制效果");
ElaDxgiManager* dxgiManager = ElaDxgiManager::getInstance();
dxgiManager->setGrabArea(1920, 1080);
_dxgiScreen = new ElaDxgiScreen(this);
_dxgiScreen->setIsSyncGrabSize(true);
ElaText* dxText = new ElaText("显卡选择", this);
dxText->setTextPixelSize(15);
_dxComboBox = new ElaComboBox(this);
_dxComboBox->addItems(dxgiManager->getDxDeviceList());
_dxComboBox->setCurrentIndex(dxgiManager->getDxDeviceID());
ElaText* outputText = new ElaText("屏幕选择", this);
outputText->setTextPixelSize(15);
_outputComboBox = new ElaComboBox(this);
_outputComboBox->addItems(dxgiManager->getOutputDeviceList());
_outputComboBox->setCurrentIndex(dxgiManager->getOutputDeviceID());
connect(_dxComboBox, QOverload<int>::of(&ElaComboBox::currentIndexChanged), this, [=](int index) {
dxgiManager->setDxDeviceID(index);
_outputComboBox->blockSignals(true);
_outputComboBox->clear();
_outputComboBox->addItems(dxgiManager->getOutputDeviceList());
_outputComboBox->setCurrentIndex(dxgiManager->getOutputDeviceID());
_outputComboBox->blockSignals(false);
_dxgiScreen->update();
});
connect(_outputComboBox, QOverload<int>::of(&ElaComboBox::currentIndexChanged), this, [=](int index) {
dxgiManager->setOutputDeviceID(index);
_dxgiScreen->update();
});
ElaToggleButton* startButton = new ElaToggleButton("捕获", this);
connect(startButton, &ElaToggleButton::toggled, this, [=](bool isToggled) {
if (isToggled)
{
dxgiManager->startGrabScreen();
}
else
{
dxgiManager->stopGrabScreen();
_dxgiScreen->update();
}
});
QHBoxLayout* comboBoxLayout = new QHBoxLayout();
comboBoxLayout->addWidget(dxText);
comboBoxLayout->addWidget(_dxComboBox);
comboBoxLayout->addSpacing(10);
comboBoxLayout->addWidget(outputText);
comboBoxLayout->addWidget(_outputComboBox);
comboBoxLayout->addWidget(startButton);
comboBoxLayout->addStretch();
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaScreen");
QVBoxLayout* centerLayout = new QVBoxLayout(centralWidget);
centerLayout->setContentsMargins(0, 0, 0, 0);
centerLayout->addLayout(comboBoxLayout);
centerLayout->addWidget(_dxgiScreen);
addCentralWidget(centralWidget, false, true);
}
T_ElaScreen::~T_ElaScreen()
{
}
#endif
@@ -0,0 +1,22 @@
#ifndef T_ELASCREEN_H
#define T_ELASCREEN_H
#include <QWidget>
#include "T_BasePage.h"
#ifdef Q_OS_WIN
class ElaDxgiScreen;
class ElaComboBox;
class T_ElaScreen : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_ElaScreen(QWidget* parent = nullptr);
~T_ElaScreen();
private:
ElaDxgiScreen* _dxgiScreen{nullptr};
ElaComboBox* _dxComboBox{nullptr};
ElaComboBox* _outputComboBox{nullptr};
};
#endif
#endif // T_ELASCREEN_H
@@ -0,0 +1,49 @@
#include "T_Graphics.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "ElaGraphicsItem.h"
#include "ElaGraphicsScene.h"
#include "ElaGraphicsView.h"
T_Graphics::T_Graphics(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaGraphics");
// 顶部元素
createCustomWidget("图形视图框架被放置于此,可在此界面体验其效果,按住Ctrl进行缩放,按住Shitf进行连接");
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaGraphics");
// GraphicsView
ElaGraphicsScene* scene = new ElaGraphicsScene(this);
scene->setSceneRect(0, 0, 1500, 1500);
ElaGraphicsItem* item1 = new ElaGraphicsItem();
item1->setWidth(100);
item1->setHeight(100);
item1->setMaxLinkPortCount(100);
item1->setMaxLinkPortCount(1);
ElaGraphicsItem* item2 = new ElaGraphicsItem();
item2->setWidth(100);
item2->setHeight(100);
scene->addItem(item1);
scene->addItem(item2);
ElaGraphicsView* view = new ElaGraphicsView(scene);
view->setScene(scene);
view->setFixedHeight(600);
QHBoxLayout* viewLayout = new QHBoxLayout();
viewLayout->setContentsMargins(0, 0, 12, 0);
viewLayout->addWidget(view);
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setContentsMargins(0, 0, 0, 0);
centerVLayout->addLayout(viewLayout);
centerVLayout->addStretch();
addCentralWidget(centralWidget, true, false, 0);
}
T_Graphics::~T_Graphics()
{
}
@@ -0,0 +1,14 @@
#ifndef T_GRAPHICS_H
#define T_GRAPHICS_H
#include "T_BasePage.h"
class T_Graphics : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_Graphics(QWidget* parent = nullptr);
~T_Graphics();
};
#endif // T_GRAPHICS_H
+240
View File
@@ -0,0 +1,240 @@
#include "T_Home.h"
#include <QDebug>
#include <QDesktopServices>
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QPainter>
#include <QVBoxLayout>
#include "ElaAcrylicUrlCard.h"
#include "ElaFlowLayout.h"
#include "ElaImageCard.h"
#include "ElaMenu.h"
#include "ElaMessageBar.h"
#include "ElaNavigationRouter.h"
#include "ElaPopularCard.h"
#include "ElaScrollArea.h"
#include "ElaText.h"
#include "ElaToolTip.h"
T_Home::T_Home(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("Home");
setTitleVisible(false);
setContentsMargins(2, 2, 0, 0);
// 标题卡片区域
ElaText* desText = new ElaText("FluentUI For QWidget", this);
desText->setTextPixelSize(18);
ElaText* titleText = new ElaText("ElaWidgetTools", this);
titleText->setTextPixelSize(35);
QVBoxLayout* titleLayout = new QVBoxLayout();
titleLayout->setContentsMargins(30, 60, 0, 0);
titleLayout->addWidget(desText);
titleLayout->addWidget(titleText);
ElaImageCard* backgroundCard = new ElaImageCard(this);
backgroundCard->setBorderRadius(10);
backgroundCard->setFixedHeight(400);
backgroundCard->setMaximumAspectRatio(1.7);
backgroundCard->setCardImage(QImage(":/Resource/Image/Home_Background.png"));
ElaAcrylicUrlCard* urlCard1 = new ElaAcrylicUrlCard(this);
urlCard1->setCardPixmapSize(QSize(62, 62));
urlCard1->setFixedSize(195, 225);
urlCard1->setTitlePixelSize(17);
urlCard1->setTitleSpacing(25);
urlCard1->setSubTitleSpacing(13);
urlCard1->setUrl("https://github.com/Liniyous/ElaWidgetTools");
urlCard1->setCardPixmap(QPixmap(":/Resource/Image/github.png"));
urlCard1->setTitle("ElaTool Github");
urlCard1->setSubTitle("Use ElaWidgetTools To Create A Cool Project");
ElaToolTip* urlCard1ToolTip = new ElaToolTip(urlCard1);
urlCard1ToolTip->setToolTip("https://github.com/Liniyous/ElaWidgetTools");
ElaAcrylicUrlCard* urlCard2 = new ElaAcrylicUrlCard(this);
urlCard2->setCardPixmapSize(QSize(62, 62));
urlCard2->setFixedSize(195, 225);
urlCard2->setTitlePixelSize(17);
urlCard2->setTitleSpacing(25);
urlCard2->setSubTitleSpacing(13);
urlCard2->setUrl("https://space.bilibili.com/21256707");
urlCard2->setCardPixmap(QPixmap(":/Resource/Image/Moon.jpg"));
urlCard2->setTitle("ElaWidgetTool");
urlCard2->setSubTitle("8009963@qq.com");
ElaScrollArea* cardScrollArea = new ElaScrollArea(this);
cardScrollArea->setWidgetResizable(true);
cardScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
cardScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
cardScrollArea->setIsGrabGesture(true, 0);
cardScrollArea->setIsOverShoot(Qt::Horizontal, true);
QWidget* cardScrollAreaWidget = new QWidget(this);
cardScrollAreaWidget->setStyleSheet("background-color:transparent;");
cardScrollArea->setWidget(cardScrollAreaWidget);
QHBoxLayout* urlCardLayout = new QHBoxLayout();
urlCardLayout->setSpacing(15);
urlCardLayout->setContentsMargins(30, 0, 0, 6);
urlCardLayout->addWidget(urlCard1);
urlCardLayout->addWidget(urlCard2);
urlCardLayout->addStretch();
QVBoxLayout* cardScrollAreaWidgetLayout = new QVBoxLayout(cardScrollAreaWidget);
cardScrollAreaWidgetLayout->setContentsMargins(0, 0, 0, 0);
cardScrollAreaWidgetLayout->addStretch();
cardScrollAreaWidgetLayout->addLayout(urlCardLayout);
QVBoxLayout* backgroundLayout = new QVBoxLayout(backgroundCard);
backgroundLayout->setContentsMargins(0, 0, 0, 0);
backgroundLayout->addLayout(titleLayout);
backgroundLayout->addWidget(cardScrollArea);
// 推荐卡片
ElaText* flowText = new ElaText("热门免费应用", this);
flowText->setTextPixelSize(20);
QHBoxLayout* flowTextLayout = new QHBoxLayout();
flowTextLayout->setContentsMargins(33, 0, 0, 0);
flowTextLayout->addWidget(flowText);
// ElaFlowLayout
ElaPopularCard* homeCard = new ElaPopularCard(this);
connect(homeCard, &ElaPopularCard::popularCardButtonClicked, this, [=]() {
QDesktopServices::openUrl(QUrl("https://github.com/Liniyous/ElaWidgetTools"));
});
homeCard->setCardPixmap(QPixmap(":/Resource/Image/Cirno.jpg"));
homeCard->setTitle("ElaWidgetTool");
homeCard->setSubTitle("5.0⭐ 实用程序与工具");
homeCard->setInteractiveTips("免费下载");
homeCard->setDetailedText("ElaWidgetTools致力于为QWidget用户提供一站式的外观和实用功能解决方案,只需数十MB内存和极少CPU占用以支持高效而美观的界面开发");
homeCard->setCardFloatPixmap(QPixmap(":/Resource/Image/IARC/IARC_7+.svg.png"));
ElaPopularCard* homeCard1 = new ElaPopularCard(this);
connect(homeCard1, &ElaPopularCard::popularCardButtonClicked, this, [=]() { Q_EMIT elaScreenNavigation(); });
homeCard1->setTitle("ElaScreen");
homeCard1->setSubTitle("5.0⭐ 实用程序与工具");
homeCard1->setCardPixmap(QPixmap(":/Resource/Image/control/AutomationProperties.png"));
homeCard1->setInteractiveTips("免费使用");
homeCard1->setDetailedText("使用ElaDxgiManager获取屏幕的实时数据,以QImage的形式处理数据,支持切换采集设备和输出设备。");
homeCard1->setCardFloatPixmap(QPixmap(":/Resource/Image/IARC/IARC_7+.svg.png"));
ElaPopularCard* homeCard2 = new ElaPopularCard(this);
connect(homeCard2, &ElaPopularCard::popularCardButtonClicked, this, [=]() { Q_EMIT elaSceneNavigation(); });
homeCard2->setTitle("ElaScene");
homeCard2->setSubTitle("5.0⭐ 实用程序与工具");
homeCard2->setCardPixmap(QPixmap(":/Resource/Image/control/Canvas.png"));
homeCard2->setInteractiveTips("免费使用");
homeCard2->setDetailedText("使用ElaScene封装的高集成度API进行快速拓扑绘图开发,对基于连接的网络拓扑特化处理。");
homeCard2->setCardFloatPixmap(QPixmap(":/Resource/Image/IARC/IARC_7+.svg.png"));
ElaPopularCard* homeCard3 = new ElaPopularCard(this);
connect(homeCard3, &ElaPopularCard::popularCardButtonClicked, this, [=]() { Q_EMIT elaBaseComponentNavigation(); });
homeCard3->setTitle("ElaBaseComponent");
homeCard3->setSubTitle("5.0⭐ 实用程序与工具");
homeCard3->setCardPixmap(QPixmap(":/Resource/Image/control/StandardUICommand.png"));
homeCard3->setInteractiveTips("免费使用");
homeCard3->setDetailedText("添加ElaBaseComponent页面中的基础组件到你的项目中以进行快捷开发,使用方便,结构整洁,API规范");
homeCard3->setCardFloatPixmap(QPixmap(":/Resource/Image/IARC/IARC_7+.svg.png"));
ElaPopularCard* homeCard4 = new ElaPopularCard(this);
connect(homeCard4, &ElaPopularCard::popularCardButtonClicked, this, [=]() { Q_EMIT elaCardNavigation(); });
homeCard4->setTitle("ElaCard");
homeCard4->setSubTitle("5.0⭐ 实用程序与工具");
homeCard4->setCardPixmap(QPixmap(":/Resource/Image/control/FlipView.png"));
homeCard4->setInteractiveTips("免费使用");
homeCard4->setDetailedText("使用ElaCard系列组件,包括促销卡片和促销卡片视窗来快速建立循环动画。");
homeCard4->setCardFloatPixmap(QPixmap(":/Resource/Image/IARC/IARC_7+.svg.png"));
ElaPopularCard* homeCard5 = new ElaPopularCard(this);
connect(homeCard5, &ElaPopularCard::popularCardButtonClicked, this, [=]() { Q_EMIT elaIconNavigation(); });
homeCard5->setTitle("ElaIcon");
homeCard5->setSubTitle("5.0⭐ 实用程序与工具");
homeCard5->setCardPixmap(QPixmap(":/Resource/Image/control/CommandBarFlyout.png"));
homeCard5->setInteractiveTips("免费使用");
homeCard5->setDetailedText("在该界面快速挑选你喜欢的图标应用到项目中,以枚举的形式使用它");
homeCard5->setCardFloatPixmap(QPixmap(":/Resource/Image/IARC/IARC_7+.svg.png"));
ElaFlowLayout* flowLayout = new ElaFlowLayout(0, 5, 5);
flowLayout->setContentsMargins(30, 0, 0, 0);
flowLayout->setIsAnimation(true);
flowLayout->addWidget(homeCard);
flowLayout->addWidget(homeCard1);
flowLayout->addWidget(homeCard2);
flowLayout->addWidget(homeCard3);
flowLayout->addWidget(homeCard4);
flowLayout->addWidget(homeCard5);
// 菜单
_homeMenu = new ElaMenu(this);
ElaMenu* checkMenu = _homeMenu->addMenu(ElaIconType::Cubes, "查看");
checkMenu->addAction("查看1");
checkMenu->addAction("查看2");
checkMenu->addAction("查看3");
checkMenu->addAction("查看4");
ElaMenu* checkMenu1 = _homeMenu->addMenu(ElaIconType::Cubes, "查看");
checkMenu1->addAction("查看1");
checkMenu1->addAction("查看2");
checkMenu1->addAction("查看3");
checkMenu1->addAction("查看4");
ElaMenu* checkMenu2 = checkMenu->addMenu(ElaIconType::Cubes, "查看");
checkMenu2->addAction("查看1");
checkMenu2->addAction("查看2");
checkMenu2->addAction("查看3");
checkMenu2->addAction("查看4");
// QKeySequence key = QKeySequence(Qt::CTRL | Qt::Key_S);
_homeMenu->addSeparator();
_homeMenu->addElaIconAction(ElaIconType::BoxCheck, "排序方式", QKeySequence::Save);
_homeMenu->addElaIconAction(ElaIconType::ArrowRotateRight, "刷新");
QAction* action = _homeMenu->addElaIconAction(ElaIconType::ArrowRotateLeft, "撤销");
connect(action, &QAction::triggered, this, [=]() {
ElaNavigationRouter::getInstance()->navigationRouteBack();
});
_homeMenu->addElaIconAction(ElaIconType::Copy, "复制");
_homeMenu->addElaIconAction(ElaIconType::MagnifyingGlassPlus, "显示设置");
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("Home");
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setSpacing(0);
centerVLayout->setContentsMargins(0, 0, 0, 0);
centerVLayout->addWidget(backgroundCard);
centerVLayout->addSpacing(20);
centerVLayout->addLayout(flowTextLayout);
centerVLayout->addSpacing(10);
centerVLayout->addLayout(flowLayout);
centerVLayout->addStretch();
addCentralWidget(centralWidget);
// 初始化提示
ElaMessageBar::success(ElaMessageBarType::BottomRight, "Success", "初始化成功!", 2000);
qDebug() << "初始化成功";
}
T_Home::~T_Home()
{
}
void T_Home::mouseReleaseEvent(QMouseEvent* event)
{
switch (event->button())
{
case Qt::RightButton:
{
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
_homeMenu->popup(event->globalPosition().toPoint());
#else
_homeMenu->popup(event->globalPos());
#endif
break;
}
default:
{
break;
}
}
ElaScrollPage::mouseReleaseEvent(event);
}
+26
View File
@@ -0,0 +1,26 @@
#ifndef T_HOME_H
#define T_HOME_H
#include "T_BasePage.h"
class ElaMenu;
class T_Home : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_Home(QWidget* parent = nullptr);
~T_Home();
Q_SIGNALS:
Q_SIGNAL void elaScreenNavigation();
Q_SIGNAL void elaBaseComponentNavigation();
Q_SIGNAL void elaSceneNavigation();
Q_SIGNAL void elaCardNavigation();
Q_SIGNAL void elaIconNavigation();
protected:
virtual void mouseReleaseEvent(QMouseEvent* event);
private:
ElaMenu* _homeMenu{nullptr};
};
#endif // T_HOME_H
+88
View File
@@ -0,0 +1,88 @@
#include "T_Icon.h"
#include <QApplication>
#include <QClipboard>
#include <QHeaderView>
#include <QStandardItemModel>
#include <QVBoxLayout>
#include "ElaLineEdit.h"
#include "ElaListView.h"
#include "ElaMessageBar.h"
#include "T_IconDelegate.h"
#include "T_IconModel.h"
T_Icon::T_Icon(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaIcon");
// 顶部元素
createCustomWidget("一堆常用图标被放置于此,左键单击以复制其枚举");
_metaEnum = QMetaEnum::fromType<ElaIconType::IconName>();
QWidget* centralWidget = new QWidget(this);
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setContentsMargins(0, 0, 5, 0);
centralWidget->setWindowTitle("ElaIcon");
// ListView
_iconView = new ElaListView(this);
_iconView->setIsTransparent(true);
_iconView->setFlow(QListView::LeftToRight);
_iconView->setViewMode(QListView::IconMode);
_iconView->setResizeMode(QListView::Adjust);
connect(_iconView, &ElaListView::clicked, this, [=](const QModelIndex& index) {
QString iconName = _iconModel->getIconNameFromModelIndex(index);
if (iconName.isEmpty())
{
return;
}
qApp->clipboard()->setText(iconName);
ElaMessageBar::success(ElaMessageBarType::Top, "复制完成", iconName + "已被复制到剪贴板", 1000, this);
});
_iconModel = new T_IconModel(this);
_iconDelegate = new T_IconDelegate(this);
_iconView->setModel(_iconModel);
_iconView->setItemDelegate(_iconDelegate);
_iconView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
_searchEdit = new ElaLineEdit(this);
_searchEdit->setPlaceholderText("搜索图标");
_searchEdit->setFixedSize(300, 35);
connect(_searchEdit, &ElaLineEdit::textEdited, this, &T_Icon::onSearchEditTextEdit);
connect(_searchEdit, &ElaLineEdit::focusIn, this, &T_Icon::onSearchEditTextEdit);
centerVLayout->addSpacing(13);
centerVLayout->addWidget(_searchEdit);
centerVLayout->addWidget(_iconView);
this->addCentralWidget(centralWidget, true, true, 0);
}
T_Icon::~T_Icon()
{
}
void T_Icon::onSearchEditTextEdit(const QString& searchText)
{
if (searchText.isEmpty())
{
_iconModel->setIsSearchMode(false);
_iconModel->setSearchKeyList(QStringList());
_iconView->clearSelection();
_iconView->viewport()->update();
return;
}
QStringList searchKeyList;
for (int i = 1; i < _metaEnum.keyCount(); i++)
{
QString key = QString(_metaEnum.key(i));
if (key.contains(searchText, Qt::CaseInsensitive))
{
searchKeyList.append(key);
}
}
_iconModel->setSearchKeyList(searchKeyList);
_iconModel->setIsSearchMode(true);
_iconView->clearSelection();
_iconView->scrollTo(_iconModel->index(0, 0));
_iconView->viewport()->update();
}
+27
View File
@@ -0,0 +1,27 @@
#ifndef T_ICON_H
#define T_ICON_H
#include <QMetaEnum>
#include "T_BasePage.h"
class ElaLineEdit;
class ElaListView;
class T_IconModel;
class T_IconDelegate;
class T_Icon : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_Icon(QWidget* parent = nullptr);
~T_Icon();
Q_SLOT void onSearchEditTextEdit(const QString& searchText);
private:
QMetaEnum _metaEnum;
ElaLineEdit* _searchEdit{nullptr};
ElaListView* _iconView;
T_IconModel* _iconModel;
T_IconDelegate* _iconDelegate;
};
#endif // T_ICON_H
@@ -0,0 +1,45 @@
#include "T_ListView.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "ElaListView.h"
#include "ElaScrollBar.h"
#include "ElaText.h"
#include "T_ListViewModel.h"
T_ListView::T_ListView(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaListView");
// 顶部元素
createCustomWidget("列表视图被放置于此,可在此界面体验其效果并按需添加进项目中");
//ElaListView
ElaText* listText = new ElaText("ElaListView", this);
listText->setTextPixelSize(18);
_listView = new ElaListView(this);
_listView->setFixedHeight(450);
// _listView->setAlternatingRowColors(true);
_listView->setModel(new T_ListViewModel(this));
ElaScrollBar* listViewFloatScrollBar = new ElaScrollBar(_listView->verticalScrollBar(), _listView);
listViewFloatScrollBar->setIsAnimation(true);
QHBoxLayout* listViewLayout = new QHBoxLayout();
listViewLayout->setContentsMargins(0, 0, 10, 0);
listViewLayout->addWidget(_listView);
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaView");
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setContentsMargins(0, 0, 0, 0);
centerVLayout->addWidget(listText);
centerVLayout->addSpacing(10);
centerVLayout->addLayout(listViewLayout);
centerVLayout->addStretch();
addCentralWidget(centralWidget, true, false, 0);
}
T_ListView::~T_ListView()
{
}
@@ -0,0 +1,18 @@
#ifndef T_LISTVIEW_H
#define T_LISTVIEW_H
#include "T_BasePage.h"
class ElaListView;
class T_ListView : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_ListView(QWidget* parent = nullptr);
~T_ListView();
private:
ElaListView* _listView{nullptr};
};
#endif // T_LISTVIEW_H
@@ -0,0 +1,30 @@
#include "T_LogWidget.h"
#include <ElaListView.h>
#include <QVBoxLayout>
#include "ElaLog.h"
#include "T_LogModel.h"
T_LogWidget::T_LogWidget(QWidget* parent)
: QWidget{parent}
{
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->setContentsMargins(0, 5, 5, 0);
ElaListView* logView = new ElaListView(this);
logView->setIsTransparent(true);
_logModel = new T_LogModel(this);
logView->setModel(_logModel);
mainLayout->addWidget(logView);
connect(ElaLog::getInstance(), &ElaLog::logMessage, this, [=](QString log) {
_logModel->appendLogList(log);
});
_logModel->appendLogList("测试条例11223344556677889900");
_logModel->appendLogList("测试条例11223344556677889900");
_logModel->appendLogList("测试条例11223344556677889900");
_logModel->appendLogList("测试条例11223344556677889900");
}
T_LogWidget::~T_LogWidget()
{
}
@@ -0,0 +1,18 @@
#ifndef T_LOGWIDGET_H
#define T_LOGWIDGET_H
#include <QWidget>
class T_LogModel;
class T_LogWidget : public QWidget
{
Q_OBJECT
public:
explicit T_LogWidget(QWidget* parent = nullptr);
~T_LogWidget();
signals:
private:
T_LogModel* _logModel{nullptr};
};
#endif // T_LOGWIDGET_H
@@ -0,0 +1,108 @@
#include "T_Navigation.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QVBoxLayout>
#include "ElaBreadcrumbBar.h"
#include "ElaPivot.h"
#include "ElaPushButton.h"
#include "ElaScrollPageArea.h"
#include "ElaTabWidget.h"
#include "ElaText.h"
T_Navigation::T_Navigation(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaNavigation");
// 顶部元素
createCustomWidget("一些导航组件被放置于此,可在此界面体验其效果并按需添加进项目中");
//ElaBreadcrumbBar
ElaText* breadcrumbBarText = new ElaText("ElaBreadcrumbBar", this);
breadcrumbBarText->setTextPixelSize(18);
_breadcrumbBar = new ElaBreadcrumbBar(this);
QStringList breadcrumbBarList;
for (int i = 0; i < 20; i++)
{
breadcrumbBarList << QString("Item%1").arg(i + 1);
}
_breadcrumbBar->setBreadcrumbList(breadcrumbBarList);
ElaPushButton* resetButton = new ElaPushButton("还原", this);
resetButton->setFixedSize(60, 32);
connect(resetButton, &ElaPushButton::clicked, this, [=]() {
_breadcrumbBar->setBreadcrumbList(breadcrumbBarList);
});
QHBoxLayout* breadcrumbBarTextLayout = new QHBoxLayout();
breadcrumbBarTextLayout->addWidget(breadcrumbBarText);
breadcrumbBarTextLayout->addSpacing(15);
breadcrumbBarTextLayout->addWidget(resetButton);
breadcrumbBarTextLayout->addStretch();
ElaScrollPageArea* breadcrumbBarArea = new ElaScrollPageArea(this);
QVBoxLayout* breadcrumbBarLayout = new QVBoxLayout(breadcrumbBarArea);
breadcrumbBarLayout->addWidget(_breadcrumbBar);
// ElaPivot
ElaText* pivotText = new ElaText("ElaPivot", this);
pivotText->setTextPixelSize(18);
_pivot = new ElaPivot(this);
_pivot->setPivotSpacing(8);
_pivot->setMarkWidth(75);
_pivot->appendPivot("本地歌曲");
_pivot->appendPivot("下载歌曲");
_pivot->appendPivot("下载视频");
_pivot->appendPivot("正在下载");
_pivot->setCurrentIndex(0);
ElaScrollPageArea* pivotArea = new ElaScrollPageArea(this);
QVBoxLayout* pivotLayout = new QVBoxLayout(pivotArea);
pivotLayout->addWidget(_pivot);
// ElaTabWidget
ElaText* tabWidgetText = new ElaText("ElaTabWidget", this);
tabWidgetText->setTextPixelSize(18);
_tabWidget = new ElaTabWidget(this);
_tabWidget->setFixedHeight(500);
QLabel* page1 = new QLabel("新标签页1", this);
page1->setAlignment(Qt::AlignCenter);
QFont font = page1->font();
font.setPixelSize(32);
page1->setFont(font);
QLabel* page2 = new QLabel("新标签页2", this);
page2->setFont(font);
page2->setAlignment(Qt::AlignCenter);
QLabel* page3 = new QLabel("新标签页3", this);
page3->setFont(font);
page3->setAlignment(Qt::AlignCenter);
QLabel* page4 = new QLabel("新标签页4", this);
page4->setFont(font);
page4->setAlignment(Qt::AlignCenter);
_tabWidget->addTab(page1, QIcon(":/Resource/Image/Cirno.jpg"), "新标签页1");
_tabWidget->addTab(page2, "新标签页2");
_tabWidget->addTab(page3, "新标签页3");
_tabWidget->addTab(page4, "新标签页4");
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaNavigation");
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setContentsMargins(0, 0, 0, 0);
centerVLayout->addLayout(breadcrumbBarTextLayout);
centerVLayout->addSpacing(10);
centerVLayout->addWidget(breadcrumbBarArea);
centerVLayout->addSpacing(15);
centerVLayout->addWidget(pivotText);
centerVLayout->addSpacing(10);
centerVLayout->addWidget(pivotArea);
centerVLayout->addSpacing(15);
centerVLayout->addWidget(tabWidgetText);
centerVLayout->addSpacing(10);
centerVLayout->addWidget(_tabWidget);
addCentralWidget(centralWidget, true, false, 0);
}
T_Navigation::~T_Navigation()
{
}
@@ -0,0 +1,22 @@
#ifndef T_NAVIGATION_H
#define T_NAVIGATION_H
#include "T_BasePage.h"
class ElaPivot;
class ElaTabWidget;
class ElaBreadcrumbBar;
class T_Navigation : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_Navigation(QWidget* parent = nullptr);
~T_Navigation();
private:
ElaBreadcrumbBar* _breadcrumbBar{nullptr};
ElaPivot* _pivot{nullptr};
ElaTabWidget* _tabWidget{nullptr};
};
#endif // T_NAVIGATION_H
+114
View File
@@ -0,0 +1,114 @@
#include "T_Popup.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "ElaCalendar.h"
#include "ElaCalendarPicker.h"
#include "ElaColorDialog.h"
#include "ElaKeyBinder.h"
#include "ElaMenu.h"
#include "ElaPushButton.h"
#include "ElaScrollPageArea.h"
#include "ElaText.h"
#include "ElaToolButton.h"
T_Popup::T_Popup(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaPopup");
// 顶部元素
createCustomWidget("一些常用的弹出组件被放置于此,可在此界面体验其效果并按需添加进项目中");
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaPopup");
_toolButton = new ElaToolButton(this);
_toolButton->setIsTransparent(false);
_toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
//_toolButton->setPopupMode(QToolButton::MenuButtonPopup);
_toolButton->setText("ElaToolButton");
ElaMenu* menu = new ElaMenu(this);
menu->addElaIconAction(ElaIconType::JackOLantern, "JackOLantern");
menu->addElaIconAction(ElaIconType::LacrosseStick, "LacrosseStick");
_toolButton->setMenu(menu);
_toolButton->setElaIcon(ElaIconType::Broom);
ElaScrollPageArea* toolButtonArea = new ElaScrollPageArea(this);
QHBoxLayout* toolButtonLayout = new QHBoxLayout(toolButtonArea);
ElaText* toolButtonText = new ElaText("ElaToolButton", this);
toolButtonText->setTextPixelSize(15);
toolButtonLayout->addWidget(toolButtonText);
toolButtonLayout->addWidget(_toolButton);
toolButtonLayout->addStretch();
_colorDialog = new ElaColorDialog(this);
ElaText* colorText = new ElaText(_colorDialog->getCurrentColorRGB(), this);
colorText->setTextPixelSize(15);
ElaPushButton* colorDialogButton = new ElaPushButton(this);
colorDialogButton->setFixedSize(35, 35);
colorDialogButton->setLightDefaultColor(_colorDialog->getCurrentColor());
colorDialogButton->setLightHoverColor(_colorDialog->getCurrentColor());
colorDialogButton->setLightPressColor(_colorDialog->getCurrentColor());
colorDialogButton->setDarkDefaultColor(_colorDialog->getCurrentColor());
colorDialogButton->setDarkHoverColor(_colorDialog->getCurrentColor());
colorDialogButton->setDarkPressColor(_colorDialog->getCurrentColor());
connect(colorDialogButton, &ElaPushButton::clicked, this, [=]() {
_colorDialog->exec();
});
connect(_colorDialog, &ElaColorDialog::colorSelected, this, [=](const QColor& color) {
colorDialogButton->setLightDefaultColor(color);
colorDialogButton->setLightHoverColor(color);
colorDialogButton->setLightPressColor(color);
colorDialogButton->setDarkDefaultColor(color);
colorDialogButton->setDarkHoverColor(color);
colorDialogButton->setDarkPressColor(color);
colorText->setText(_colorDialog->getCurrentColorRGB());
});
ElaScrollPageArea* colorDialogArea = new ElaScrollPageArea(this);
QHBoxLayout* colorDialogLayout = new QHBoxLayout(colorDialogArea);
ElaText* colorDialogText = new ElaText("ElaColorDialog", this);
colorDialogText->setTextPixelSize(15);
colorDialogLayout->addWidget(colorDialogText);
colorDialogLayout->addWidget(colorDialogButton);
colorDialogLayout->addWidget(colorText);
colorDialogLayout->addStretch();
_calendar = new ElaCalendar(this);
_calendarPicker = new ElaCalendarPicker(this);
ElaScrollPageArea* calendarPickerArea = new ElaScrollPageArea(this);
QHBoxLayout* calendarPickerLayout = new QHBoxLayout(calendarPickerArea);
ElaText* calendarPickerText = new ElaText("ElaCalendarPicker", this);
calendarPickerText->setTextPixelSize(15);
calendarPickerLayout->addWidget(calendarPickerText);
calendarPickerLayout->addWidget(_calendarPicker);
calendarPickerLayout->addStretch();
_keyBinder = new ElaKeyBinder(this);
ElaScrollPageArea* keyBinderArea = new ElaScrollPageArea(this);
QHBoxLayout* keyBinderLayout = new QHBoxLayout(keyBinderArea);
ElaText* keyBinderText = new ElaText("ElaKeyBinder", this);
keyBinderText->setTextPixelSize(15);
keyBinderLayout->addWidget(keyBinderText);
keyBinderLayout->addWidget(_keyBinder);
keyBinderLayout->addStretch();
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setContentsMargins(0, 0, 0, 0);
centerVLayout->addWidget(toolButtonArea);
centerVLayout->addWidget(colorDialogArea);
centerVLayout->addWidget(calendarPickerArea);
centerVLayout->addWidget(_calendar);
centerVLayout->addWidget(keyBinderArea);
centerVLayout->addStretch();
addCentralWidget(centralWidget, true, false, 0);
}
T_Popup::~T_Popup()
{
}
+26
View File
@@ -0,0 +1,26 @@
#ifndef T_POPUP_H
#define T_POPUP_H
#include "T_BasePage.h"
class ElaToolButton;
class ElaColorDialog;
class ElaCalendar;
class ElaCalendarPicker;
class ElaKeyBinder;
class T_Popup : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_Popup(QWidget* parent = nullptr);
~T_Popup();
private:
ElaToolButton* _toolButton{nullptr};
ElaColorDialog* _colorDialog{nullptr};
ElaCalendar* _calendar{nullptr};
ElaCalendarPicker* _calendarPicker{nullptr};
ElaKeyBinder* _keyBinder{nullptr};
};
#endif// T_POPUP_H
@@ -0,0 +1,160 @@
#include "T_Setting.h"
#include <QDebug>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "ElaApplication.h"
#include "ElaComboBox.h"
#include "ElaLog.h"
#include "ElaRadioButton.h"
#include "ElaScrollPageArea.h"
#include "ElaText.h"
#include "ElaTheme.h"
#include "ElaToggleSwitch.h"
#include "ElaWindow.h"
T_Setting::T_Setting(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
ElaWindow* window = dynamic_cast<ElaWindow*>(parent);
setWindowTitle("Setting");
ElaText* themeText = new ElaText("主题设置", this);
themeText->setWordWrap(false);
themeText->setTextPixelSize(18);
_themeComboBox = new ElaComboBox(this);
_themeComboBox->addItem("日间模式");
_themeComboBox->addItem("夜间模式");
ElaScrollPageArea* themeSwitchArea = new ElaScrollPageArea(this);
QHBoxLayout* themeSwitchLayout = new QHBoxLayout(themeSwitchArea);
ElaText* themeSwitchText = new ElaText("主题切换", this);
themeSwitchText->setWordWrap(false);
themeSwitchText->setTextPixelSize(15);
themeSwitchLayout->addWidget(themeSwitchText);
themeSwitchLayout->addStretch();
themeSwitchLayout->addWidget(_themeComboBox);
connect(_themeComboBox, QOverload<int>::of(&ElaComboBox::currentIndexChanged), this, [=](int index) {
if (index == 0)
{
eTheme->setThemeMode(ElaThemeType::Light);
}
else
{
eTheme->setThemeMode(ElaThemeType::Dark);
}
});
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) {
_themeComboBox->blockSignals(true);
if (themeMode == ElaThemeType::Light)
{
_themeComboBox->setCurrentIndex(0);
}
else
{
_themeComboBox->setCurrentIndex(1);
}
_themeComboBox->blockSignals(false);
});
ElaText* helperText = new ElaText("应用程序设置", this);
helperText->setWordWrap(false);
helperText->setTextPixelSize(18);
_micaSwitchButton = new ElaToggleSwitch(this);
ElaScrollPageArea* micaSwitchArea = new ElaScrollPageArea(this);
QHBoxLayout* micaSwitchLayout = new QHBoxLayout(micaSwitchArea);
ElaText* micaSwitchText = new ElaText("启用云母效果(跨平台)", this);
micaSwitchText->setWordWrap(false);
micaSwitchText->setTextPixelSize(15);
micaSwitchLayout->addWidget(micaSwitchText);
micaSwitchLayout->addStretch();
micaSwitchLayout->addWidget(_micaSwitchButton);
connect(_micaSwitchButton, &ElaToggleSwitch::toggled, this, [=](bool checked) {
eApp->setIsEnableMica(checked);
});
_logSwitchButton = new ElaToggleSwitch(this);
ElaScrollPageArea* logSwitchArea = new ElaScrollPageArea(this);
QHBoxLayout* logSwitchLayout = new QHBoxLayout(logSwitchArea);
ElaText* logSwitchText = new ElaText("启用日志功能", this);
logSwitchText->setWordWrap(false);
logSwitchText->setTextPixelSize(15);
logSwitchLayout->addWidget(logSwitchText);
logSwitchLayout->addStretch();
logSwitchLayout->addWidget(_logSwitchButton);
connect(_logSwitchButton, &ElaToggleSwitch::toggled, this, [=](bool checked) {
ElaLog::getInstance()->initMessageLog(checked);
if (checked)
{
qDebug() << "日志已启用!";
}
else
{
qDebug() << "日志已关闭!";
}
});
_minimumButton = new ElaRadioButton("Minimum", this);
_compactButton = new ElaRadioButton("Compact", this);
_maximumButton = new ElaRadioButton("Maximum", this);
_autoButton = new ElaRadioButton("Auto", this);
_autoButton->setChecked(true);
ElaScrollPageArea* displayModeArea = new ElaScrollPageArea(this);
QHBoxLayout* displayModeLayout = new QHBoxLayout(displayModeArea);
ElaText* displayModeText = new ElaText("导航栏模式选择", this);
displayModeText->setWordWrap(false);
displayModeText->setTextPixelSize(15);
displayModeLayout->addWidget(displayModeText);
displayModeLayout->addStretch();
displayModeLayout->addWidget(_minimumButton);
displayModeLayout->addWidget(_compactButton);
displayModeLayout->addWidget(_maximumButton);
displayModeLayout->addWidget(_autoButton);
connect(_minimumButton, &ElaRadioButton::toggled, this, [=](bool checked) {
if (checked)
{
window->setNavigationBarDisplayMode(ElaNavigationType::Minimal);
}
});
connect(_compactButton, &ElaRadioButton::toggled, this, [=](bool checked) {
if (checked)
{
window->setNavigationBarDisplayMode(ElaNavigationType::Compact);
}
});
connect(_maximumButton, &ElaRadioButton::toggled, this, [=](bool checked) {
if (checked)
{
window->setNavigationBarDisplayMode(ElaNavigationType::Maximal);
}
});
connect(_autoButton, &ElaRadioButton::toggled, this, [=](bool checked) {
if (checked)
{
window->setNavigationBarDisplayMode(ElaNavigationType::Auto);
}
});
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("Setting");
QVBoxLayout* centerLayout = new QVBoxLayout(centralWidget);
centerLayout->addSpacing(30);
centerLayout->addWidget(themeText);
centerLayout->addSpacing(10);
centerLayout->addWidget(themeSwitchArea);
centerLayout->addSpacing(15);
centerLayout->addWidget(helperText);
centerLayout->addSpacing(10);
centerLayout->addWidget(logSwitchArea);
centerLayout->addWidget(micaSwitchArea);
centerLayout->addWidget(displayModeArea);
centerLayout->addStretch();
centerLayout->setContentsMargins(0, 0, 0, 0);
addCentralWidget(centralWidget, true, true, 0);
}
T_Setting::~T_Setting()
{
}
+25
View File
@@ -0,0 +1,25 @@
#ifndef T_SETTING_H
#define T_SETTING_H
#include "T_BasePage.h"
class ElaRadioButton;
class ElaToggleSwitch;
class ElaComboBox;
class T_Setting : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_Setting(QWidget* parent = nullptr);
~T_Setting();
private:
ElaComboBox* _themeComboBox{nullptr};
ElaToggleSwitch* _micaSwitchButton{nullptr};
ElaToggleSwitch* _logSwitchButton{nullptr};
ElaRadioButton* _minimumButton{nullptr};
ElaRadioButton* _compactButton{nullptr};
ElaRadioButton* _maximumButton{nullptr};
ElaRadioButton* _autoButton{nullptr};
};
#endif // T_SETTING_H
@@ -0,0 +1,60 @@
#include "T_TableView.h"
#include <QHBoxLayout>
#include <QHeaderView>
#include <QVBoxLayout>
#include "ElaTableView.h"
#include "ElaText.h"
#include "T_TableViewModel.h"
T_TableView::T_TableView(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaTableView");
// 顶部元素
createCustomWidget("表格视图被放置于此,可在此界面体验其效果并按需添加进项目中");
//ElaTableView
ElaText* tableText = new ElaText("ElaTableView", this);
tableText->setTextPixelSize(18);
_tableView = new ElaTableView(this);
// ElaScrollBar* tableViewFloatScrollBar = new ElaScrollBar(_tableView->verticalScrollBar(), _tableView);
// tableViewFloatScrollBar->setIsAnimation(true);
QFont tableHeaderFont = _tableView->horizontalHeader()->font();
tableHeaderFont.setPixelSize(16);
_tableView->horizontalHeader()->setFont(tableHeaderFont);
_tableView->setModel(new T_TableViewModel(this));
_tableView->setAlternatingRowColors(true);
_tableView->setIconSize(QSize(38, 38));
_tableView->verticalHeader()->setHidden(true);
_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
_tableView->horizontalHeader()->setMinimumSectionSize(60);
_tableView->verticalHeader()->setMinimumSectionSize(46);
_tableView->setFixedHeight(450);
connect(_tableView, &ElaTableView::tableViewShow, this, [=]() {
_tableView->setColumnWidth(0, 60);
_tableView->setColumnWidth(1, 205);
_tableView->setColumnWidth(2, 170);
_tableView->setColumnWidth(3, 150);
_tableView->setColumnWidth(4, 60);
});
QHBoxLayout* tableViewLayout = new QHBoxLayout();
tableViewLayout->setContentsMargins(0, 0, 10, 0);
tableViewLayout->addWidget(_tableView);
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaView");
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setContentsMargins(0, 0, 0, 0);
centerVLayout->addWidget(tableText);
centerVLayout->addSpacing(10);
centerVLayout->addLayout(tableViewLayout);
addCentralWidget(centralWidget, true, false, 0);
}
T_TableView::~T_TableView()
{
}
@@ -0,0 +1,18 @@
#ifndef T_TABLEVIEW_H
#define T_TABLEVIEW_H
#include "T_BasePage.h"
class ElaTableView;
class T_TableView : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_TableView(QWidget* parent = nullptr);
~T_TableView();
private:
ElaTableView* _tableView{nullptr};
};
#endif // T_TABLEVIEW_H
@@ -0,0 +1,141 @@
#include "T_TreeView.h"
#include <QHBoxLayout>
#include <QHeaderView>
#include <QVBoxLayout>
#include "ElaPushButton.h"
#include "ElaScrollBar.h"
#include "ElaSlider.h"
#include "ElaText.h"
#include "ElaTreeView.h"
#include "T_TreeViewModel.h"
T_TreeView::T_TreeView(QWidget* parent)
: T_BasePage(parent)
{
// 预览窗口标题
setWindowTitle("ElaTreeView");
// 顶部元素
createCustomWidget("树型视图被放置于此,可在此界面体验其效果并按需添加进项目中");
// ElaTreeView
T_TreeViewModel* treeModel = new T_TreeViewModel(this);
QHBoxLayout* treeLayout = new QHBoxLayout();
treeLayout->setContentsMargins(0, 0, 10, 0);
QWidget* treeSettingWidget = new QWidget(this);
QVBoxLayout* treeSettingWidgetLayout = new QVBoxLayout(treeSettingWidget);
treeSettingWidgetLayout->setContentsMargins(0, 0, 0, 0);
treeSettingWidgetLayout->setSpacing(15);
// 数据统计
ElaText* dataText = new ElaText(QString("树模型总数据条数:%1").arg(treeModel->getItemCount()), this);
dataText->setTextPixelSize(15);
// ItemHeight
ElaText* itemHeightText = new ElaText("ItemHeight", this);
itemHeightText->setTextPixelSize(15);
ElaSlider* itemHeightSlider = new ElaSlider(this);
itemHeightSlider->setRange(200, 600);
itemHeightSlider->setValue(350);
ElaText* itemHeightValueText = new ElaText("35", this);
itemHeightValueText->setTextPixelSize(15);
connect(itemHeightSlider, &ElaSlider::valueChanged, this, [=](int value) {
itemHeightValueText->setText(QString::number(value / 10));
_treeView->setItemHeight(value / 10);
});
QHBoxLayout* itemHeightLayout = new QHBoxLayout();
itemHeightLayout->setContentsMargins(0, 0, 0, 0);
itemHeightLayout->addWidget(itemHeightText);
itemHeightLayout->addWidget(itemHeightSlider);
itemHeightLayout->addWidget(itemHeightValueText);
// HeaderMargin
ElaText* headerMarginText = new ElaText("HeaderMargin", this);
headerMarginText->setTextPixelSize(15);
ElaSlider* headerMarginSlider = new ElaSlider(this);
headerMarginSlider->setRange(0, 200);
headerMarginSlider->setValue(50);
ElaText* headerMarginValueText = new ElaText("5", this);
headerMarginValueText->setTextPixelSize(15);
connect(headerMarginSlider, &ElaSlider::valueChanged, this, [=](int value) {
headerMarginValueText->setText(QString::number(value / 10));
_treeView->setHeaderMargin(value / 10);
});
QHBoxLayout* headerMarginLayout = new QHBoxLayout();
headerMarginLayout->setContentsMargins(0, 0, 0, 0);
headerMarginLayout->addWidget(headerMarginText);
headerMarginLayout->addWidget(headerMarginSlider);
headerMarginLayout->addWidget(headerMarginValueText);
// Indentation
ElaText* indentationText = new ElaText("Indentation", this);
indentationText->setTextPixelSize(15);
ElaSlider* indentationSlider = new ElaSlider(this);
indentationSlider->setRange(200, 1000);
indentationSlider->setValue(200);
ElaText* indentationValueText = new ElaText("20", this);
indentationValueText->setTextPixelSize(15);
connect(indentationSlider, &ElaSlider::valueChanged, this, [=](int value) {
indentationValueText->setText(QString::number(value / 10));
_treeView->setIndentation(value / 10);
});
QHBoxLayout* indentationLayout = new QHBoxLayout();
indentationLayout->setContentsMargins(0, 0, 0, 0);
indentationLayout->addWidget(indentationText);
indentationLayout->addWidget(indentationSlider);
indentationLayout->addWidget(indentationValueText);
//展开全部
QHBoxLayout* expandCollapseLayout = new QHBoxLayout();
expandCollapseLayout->setContentsMargins(0, 0, 0, 0);
ElaPushButton* expandButton = new ElaPushButton("展开全部", this);
expandButton->setFixedWidth(80);
connect(expandButton, &ElaPushButton::clicked, this, [=]() {
_treeView->expandAll();
});
//收起全部
ElaPushButton* collapseButton = new ElaPushButton("收起全部", this);
collapseButton->setFixedWidth(80);
connect(collapseButton, &ElaPushButton::clicked, this, [=]() {
_treeView->collapseAll();
});
expandCollapseLayout->addWidget(expandButton);
expandCollapseLayout->addWidget(collapseButton);
expandCollapseLayout->addStretch();
treeSettingWidgetLayout->addWidget(dataText);
treeSettingWidgetLayout->addLayout(itemHeightLayout);
treeSettingWidgetLayout->addLayout(headerMarginLayout);
treeSettingWidgetLayout->addLayout(indentationLayout);
treeSettingWidgetLayout->addLayout(expandCollapseLayout);
treeSettingWidgetLayout->addStretch();
// TreeView
ElaText* treeText = new ElaText("ElaTreeView", this);
treeText->setTextPixelSize(18);
_treeView = new ElaTreeView(this);
ElaScrollBar* treeViewFloatScrollBar = new ElaScrollBar(_treeView->verticalScrollBar(), _treeView);
treeViewFloatScrollBar->setIsAnimation(true);
QFont headerFont = _treeView->header()->font();
headerFont.setPixelSize(16);
_treeView->header()->setFont(headerFont);
_treeView->setFixedHeight(450);
_treeView->setModel(treeModel);
treeLayout->addWidget(treeSettingWidget);
treeLayout->addWidget(_treeView);
QWidget* centralWidget = new QWidget(this);
centralWidget->setWindowTitle("ElaView");
QVBoxLayout* centerVLayout = new QVBoxLayout(centralWidget);
centerVLayout->setContentsMargins(0, 0, 0, 0);
centerVLayout->addWidget(treeText);
centerVLayout->addSpacing(10);
centerVLayout->addLayout(treeLayout);
addCentralWidget(centralWidget, true, false, 0);
}
T_TreeView::~T_TreeView()
{
}
@@ -0,0 +1,18 @@
#ifndef T_TREEVIEW_H
#define T_TREEVIEW_H
#include "T_BasePage.h"
class ElaTreeView;
class T_TreeView : public T_BasePage
{
Q_OBJECT
public:
Q_INVOKABLE explicit T_TreeView(QWidget* parent = nullptr);
~T_TreeView();
private:
ElaTreeView* _treeView{nullptr};
};
#endif // T_TREEVIEW_H
@@ -0,0 +1,34 @@
#include "T_UpdateWidget.h"
#include <QVBoxLayout>
#include "ElaText.h"
T_UpdateWidget::T_UpdateWidget(QWidget* parent)
: QWidget{parent}
{
setMinimumSize(200, 260);
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->setSizeConstraint(QLayout::SetMaximumSize);
mainLayout->setContentsMargins(5, 10, 5, 5);
mainLayout->setSpacing(4);
ElaText* updateTitle = new ElaText("2024-11-17更新", 15, this);
ElaText* update1 = new ElaText("1、新增ElaKeyBinder单键位绑定组件,支持鼠标按键", 13, this);
ElaText* update2 = new ElaText("2、ElaContentDialog中间按钮按下行为优化", 13, this);
ElaText* update3 = new ElaText("3、ElaWindow导航模式切换相关问题修正", 13, this);
ElaText* update4 = new ElaText("4、CMAKE编译配置和体验优化", 13, this);
update1->setIsWrapAnywhere(true);
update2->setIsWrapAnywhere(true);
update3->setIsWrapAnywhere(true);
update4->setIsWrapAnywhere(true);
mainLayout->addWidget(updateTitle);
mainLayout->addWidget(update1);
mainLayout->addWidget(update2);
mainLayout->addWidget(update3);
mainLayout->addWidget(update4);
mainLayout->addStretch();
}
T_UpdateWidget::~T_UpdateWidget()
{
}
@@ -0,0 +1,14 @@
#ifndef T_UPDATEWIDGET_H
#define T_UPDATEWIDGET_H
#include <QWidget>
class T_UpdateWidget : public QWidget
{
Q_OBJECT
public:
explicit T_UpdateWidget(QWidget* parent = nullptr);
~T_UpdateWidget();
};
#endif // T_UPDATEWIDGET_H
@@ -0,0 +1,74 @@
#include "T_IconDelegate.h"
#include <QPainter>
#include "Def.h"
#include "ElaTheme.h"
T_IconDelegate::T_IconDelegate(QObject* parent)
: QStyledItemDelegate{parent}
{
connect(eTheme, &ElaTheme::themeModeChanged, this, [=](ElaThemeType::ThemeMode themeMode) { _themeMode = themeMode; });
}
T_IconDelegate::~T_IconDelegate()
{
}
void T_IconDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
QStyleOptionViewItem viewOption(option);
initStyleOption(&viewOption, index);
if (option.state.testFlag(QStyle::State_HasFocus))
{
viewOption.state &= ~QStyle::State_HasFocus;
}
QStyledItemDelegate::paint(painter, viewOption, index);
QStringList iconList = index.data(Qt::UserRole).toStringList();
if (iconList.count() != 2)
{
return;
}
QString iconName = iconList.at(0);
QString iconValue = iconList.at(1);
painter->save();
painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
painter->save();
QFont iconFont = QFont("ElaAwesome");
iconFont.setPixelSize(22);
painter->setFont(iconFont);
painter->setPen(ElaThemeColor(_themeMode, BasicText));
painter->drawText(option.rect.x() + option.rect.width() / 2 - 11, option.rect.y() + option.rect.height() / 2 - 11, iconValue);
painter->restore();
// 文字绘制
painter->setPen(ElaThemeColor(_themeMode, BasicText));
QFont titlefont = painter->font();
titlefont.setPixelSize(13);
painter->setFont(titlefont);
qreal rowTextWidth = option.rect.width() * 0.8;
int subTitleRow = painter->fontMetrics().horizontalAdvance(iconName) / rowTextWidth;
if (subTitleRow > 0)
{
QString subTitleText = iconName;
for (int i = 0; i < subTitleRow + 1; i++)
{
QString text = painter->fontMetrics().elidedText(subTitleText, Qt::ElideRight, rowTextWidth);
if (text.right(3).contains(""))
{
text = text.replace("", subTitleText.mid(text.length() - 1, 1));
}
subTitleText.remove(0, text.length());
painter->drawText(option.rect.x() + option.rect.width() / 2 - painter->fontMetrics().horizontalAdvance(text) / 2, option.rect.y() + option.rect.height() - 10 * (subTitleRow + 1 - i), text);
}
}
else
{
painter->drawText(option.rect.x() + option.rect.width() / 2 - painter->fontMetrics().horizontalAdvance(iconName) / 2, option.rect.y() + option.rect.height() - 20, iconName);
}
painter->restore();
}
QSize T_IconDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
{
return QSize(100, 100);
}
@@ -0,0 +1,22 @@
#ifndef T_ICONDELEGATE_H
#define T_ICONDELEGATE_H
#include <QStyledItemDelegate>
#include "Def.h"
class T_IconDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit T_IconDelegate(QObject* parent = nullptr);
~T_IconDelegate();
protected:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
private:
ElaThemeType::ThemeMode _themeMode{ElaThemeType::Light};
};
#endif // T_ICONDELEGATE_H
@@ -0,0 +1,86 @@
#include "T_IconModel.h"
#include "Def.h"
T_IconModel::T_IconModel(QObject* parent)
: QAbstractListModel{parent}
{
_metaEnum = QMetaEnum::fromType<ElaIconType::IconName>();
_rowCount = _metaEnum.keyCount() - 1;
_pIsSearchMode = false;
}
T_IconModel::~T_IconModel()
{
}
int T_IconModel::rowCount(const QModelIndex& parent) const
{
return _rowCount;
}
void T_IconModel::setSearchKeyList(QStringList list)
{
beginResetModel();
this->_searchKeyList = list;
if (_pIsSearchMode)
{
_rowCount = this->getSearchKeyList().count();
}
else
{
_rowCount = _metaEnum.keyCount() - 1;
}
endResetModel();
}
QStringList T_IconModel::getSearchKeyList()
{
return this->_searchKeyList;
}
QVariant T_IconModel::data(const QModelIndex& index, int role) const
{
if (role == Qt::UserRole)
{
if (!_pIsSearchMode)
{
if (index.row() >= _metaEnum.keyCount() - 1)
{
return QVariant();
}
return QStringList{_metaEnum.key(index.row() + 1), QChar(_metaEnum.value(index.row() + 1))};
}
else
{
QStringList iconList;
if (index.row() >= _searchKeyList.count())
{
return QVariant();
}
iconList.append(_searchKeyList.at(index.row()));
iconList.append(QChar(_metaEnum.keyToValue(_searchKeyList.at(index.row()).toUtf8().constData())));
return iconList;
}
}
return QVariant();
}
QString T_IconModel::getIconNameFromModelIndex(const QModelIndex& index) const
{
QString iconName;
if (_pIsSearchMode)
{
if (index.row() < _searchKeyList.count())
{
iconName = QString("ElaIconType::") + _searchKeyList.at(index.row());
}
}
else
{
if (index.row() < _metaEnum.keyCount() - 1)
{
iconName = QString("ElaIconType::") + _metaEnum.key(index.row() + 1);
}
}
return iconName;
}
+28
View File
@@ -0,0 +1,28 @@
#ifndef T_ICONMODEL_H
#define T_ICONMODEL_H
#include <QAbstractListModel>
#include <QMetaEnum>
#include "stdafx.h"
class T_IconModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY_CREATE(bool, IsSearchMode)
public:
explicit T_IconModel(QObject* parent = nullptr);
~T_IconModel();
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
void setSearchKeyList(QStringList list);
QStringList getSearchKeyList();
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
QString getIconNameFromModelIndex(const QModelIndex& index) const;
private:
QMetaEnum _metaEnum;
QStringList _searchKeyList;
int _rowCount;
};
#endif // T_ICONMODEL_H
@@ -0,0 +1,63 @@
#include "T_ListViewModel.h"
T_ListViewModel::T_ListViewModel(QObject* parent)
: QAbstractListModel{parent}
{
_dataList.append("最轻一个灵魂 送出玫瑰星光");
_dataList.append("最轻一句提问 答案是生命的存亡");
_dataList.append("最轻一颗麦种 由云帆托起");
_dataList.append("流浪至黑暗的心脏");
_dataList.append("轻轻的一支航船");
_dataList.append("归来却被囚困旧港湾");
_dataList.append("轻轻的一些落叶");
_dataList.append("飘零在梦萦故乡彼岸");
_dataList.append("轻轻的虫 森林鸣唱");
_dataList.append("轻轻的鱼 渡向汪洋");
_dataList.append("我们是 轻轻轻轻摇曳的篝火");
_dataList.append("轻轻对天空哼一支歌");
_dataList.append("轻轻被谁听见了");
_dataList.append("轻轻的被随意熄灭了");
_dataList.append("可我要 重重将夜灼伤");
_dataList.append("可我要 重重将夜点燃");
_dataList.append("更明亮的 也曾尘埃一样");
_dataList.append("最轻一段目光 注视年岁漫长");
_dataList.append("最轻一根琴弦 沉默着致命的声浪");
_dataList.append("最轻一线悬丝 紧握住锋芒");
_dataList.append("牵系着存亡的衡量");
_dataList.append("轻轻的一枚棋子 阻挡在骑士前进路上");
_dataList.append("轻轻的一双手掌 爱抚的婴孩不再成长");
_dataList.append("轻轻的虫 童话里唱");
_dataList.append("轻轻的鱼 向宇宙望");
_dataList.append("我们是 轻轻轻轻摇曳的篝火");
_dataList.append("轻轻对天空哼一支歌");
_dataList.append("轻轻被谁听见了");
_dataList.append("轻轻的被随意熄灭了");
_dataList.append("可我要 重重将夜灼伤");
_dataList.append("可我要 重重将夜点燃");
_dataList.append("更明亮的 也曾尘埃一样");
_dataList.append("轻轻时间 重重浩荡纪年");
_dataList.append("轻轻的文明 重重书写");
_dataList.append("轻轻身躯 重重对峙黑夜");
_dataList.append("轻轻的人类 重重思想");
_dataList.append("向宇宙望 向宇宙望");
_dataList.append("向远航");
_dataList.append("最重一粒微光");
}
T_ListViewModel::~T_ListViewModel()
{
}
int T_ListViewModel::rowCount(const QModelIndex& parent) const
{
return this->_dataList.count();
}
QVariant T_ListViewModel::data(const QModelIndex& index, int role) const
{
if (role == Qt::DisplayRole)
{
return _dataList[index.row()];
}
return QVariant();
}
@@ -0,0 +1,21 @@
#ifndef T_LISTVIEWMODEL_H
#define T_LISTVIEWMODEL_H
#include <QAbstractListModel>
class T_ListViewModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit T_ListViewModel(QObject* parent = nullptr);
~T_ListViewModel();
protected:
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role) const override;
private:
QStringList _dataList;
};
#endif // T_LISTVIEWMODEL_H
@@ -0,0 +1,43 @@
#include "T_LogModel.h"
T_LogModel::T_LogModel(QObject* parent)
: QAbstractListModel{parent}
{
}
T_LogModel::~T_LogModel()
{
}
int T_LogModel::rowCount(const QModelIndex& parent) const
{
return this->_logList.count();
}
QVariant T_LogModel::data(const QModelIndex& index, int role) const
{
if (role == Qt::DisplayRole)
{
return _logList[index.row()];
}
return QVariant();
}
void T_LogModel::setLogList(QStringList list)
{
beginResetModel();
this->_logList = list;
endResetModel();
}
void T_LogModel::appendLogList(QString log)
{
beginResetModel();
this->_logList.append(log);
endResetModel();
}
QStringList T_LogModel::getLogList() const
{
return this->_logList;
}
+24
View File
@@ -0,0 +1,24 @@
#ifndef T_LOGMODEL_H
#define T_LOGMODEL_H
#include <QAbstractListModel>
class T_LogModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit T_LogModel(QObject* parent = nullptr);
~T_LogModel();
void setLogList(QStringList list);
void appendLogList(QString log);
QStringList getLogList() const;
protected:
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role) const override;
private:
QStringList _logList;
};
#endif // T_LOGMODEL_H
@@ -0,0 +1,120 @@
#include "T_TableViewModel.h"
#include <QIcon>
T_TableViewModel::T_TableViewModel(QObject* parent)
: QAbstractTableModel{parent}
{
_header << "预览"
<< "歌名"
<< "歌手"
<< "专辑"
<< "时长";
QStringList data0;
QStringList data1;
QStringList data2;
QStringList data3;
QStringList data4;
QStringList data5;
QStringList data6;
QStringList data7;
QStringList data8;
data0 << "夜航星(Night Voyager)"
<< "不才/三体宇宙"
<< "我的三体之章北海传"
<< "05:03";
data1 << "玫瑰少年"
<< "五月天"
<< "玫瑰少年"
<< "03:55";
data2 << "Collapsing World(Original Mix)"
<< "Lightscape"
<< "Collapsing World"
<< "03:10";
data3 << "RAIN MAN (雨人)"
<< "AKIHIDE (佐藤彰秀)"
<< "RAIN STORY"
<< "05:37";
data4 << "黑暗森林"
<< "雲翼星辰"
<< "黑暗森林"
<< "05:47";
data5 << "轻(我的三体第四季主题曲)"
<< "刘雪茗"
<< "我的三体第四季"
<< "01:59";
data6 << "STYX HELIX"
<< "MYTH & ROID"
<< "STYX HELIX"
<< "04:51";
data7 << "LAST STARDUST"
<< "Aimer"
<< "DAWN"
<< "05:18";
data8 << "Running In The Dark"
<< "MONKEY MAJIK/塞壬唱片"
<< "Running In The Dark"
<< "03:40";
_dataList.append(data0);
_dataList.append(data1);
_dataList.append(data2);
_dataList.append(data3);
_dataList.append(data4);
_dataList.append(data5);
_dataList.append(data6);
_dataList.append(data7);
_dataList.append(data8);
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/NaightNavigationStar.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/MaVieEnRose.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/CollapsingWorld.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/RainMan.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/DarkForest.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/Light.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/STYXHELIX.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/LASTSTARDUST.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
_iconList.append(QIcon(QPixmap(":/Resource/Image/Model/RunningInTheDark.jpg").scaled(38, 38, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
}
T_TableViewModel::~T_TableViewModel()
{
}
int T_TableViewModel::rowCount(const QModelIndex& parent) const
{
return 100;
}
int T_TableViewModel::columnCount(const QModelIndex& parent) const
{
return _header.count();
}
QVariant T_TableViewModel::data(const QModelIndex& index, int role) const
{
if (role == Qt::DisplayRole && index.column() != 0)
{
return _dataList[index.row() % 9][index.column() - 1];
}
else if (role == Qt::DecorationRole && index.column() == 0)
{
return _iconList[index.row() % 9];
}
else if (role == Qt::DecorationPropertyRole)
{
return Qt::AlignCenter;
}
else if (role == Qt::TextAlignmentRole && index.column() == 4)
{
return Qt::AlignCenter;
}
return QVariant();
}
QVariant T_TableViewModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
{
return _header[section];
}
return QAbstractTableModel::headerData(section, orientation, role);
}
@@ -0,0 +1,24 @@
#ifndef T_TABLEVIEWMODEL_H
#define T_TABLEVIEWMODEL_H
#include <QAbstractTableModel>
class T_TableViewModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit T_TableViewModel(QObject* parent = nullptr);
~T_TableViewModel();
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
private:
QStringList _header;
QList<QStringList> _dataList;
QList<QIcon> _iconList;
};
#endif // T_TABLEVIEWMODEL_H
+110
View File
@@ -0,0 +1,110 @@
#include "T_TreeItem.h"
#include <QUuid>
T_TreeItem::T_TreeItem(QString itemTitle, T_TreeItem* parent)
: QObject{parent}
{
_itemKey = QUuid::createUuid().toString().remove("{").remove("}").remove("-");
_itemTitle = itemTitle;
_pParentItem = parent;
_pIsChecked = false;
}
T_TreeItem::~T_TreeItem()
{
qDeleteAll(_pChildrenItems);
}
QString T_TreeItem::getItemKey() const
{
return _itemKey;
}
QString T_TreeItem::getItemTitle() const
{
return _itemTitle;
}
void T_TreeItem::setChildChecked(bool isChecked)
{
if (isChecked)
{
for (auto node : _pChildrenItems)
{
node->setIsChecked(isChecked);
node->setChildChecked(isChecked);
}
}
else
{
for (auto node : _pChildrenItems)
{
node->setChildChecked(isChecked);
node->setIsChecked(isChecked);
}
}
}
Qt::CheckState T_TreeItem::getChildCheckState()
{
bool isAllChecked = true;
bool isAnyChecked = false;
for (auto node : _pChildrenItems)
{
if (node->getIsChecked())
{
isAnyChecked = true;
}
else
{
isAllChecked = false;
}
Qt::CheckState childState = node->getChildCheckState();
if (childState == Qt::PartiallyChecked)
{
isAllChecked = false;
isAnyChecked = true;
break;
}
else if (childState == Qt::Unchecked)
{
isAllChecked = false;
}
}
if (_pChildrenItems.count() > 0)
{
if (isAllChecked)
{
return Qt::Checked;
}
if (isAnyChecked)
{
return Qt::PartiallyChecked;
}
return Qt::Unchecked;
}
return Qt::Checked;
}
void T_TreeItem::appendChildItem(T_TreeItem* childItem)
{
_pChildrenItems.append(childItem);
}
bool T_TreeItem::getIsHasChild() const
{
if (_pChildrenItems.count() > 0)
{
return true;
}
return false;
}
int T_TreeItem::getRow() const
{
if (_pParentItem)
{
return _pParentItem->getChildrenItems().indexOf(const_cast<T_TreeItem*>(this));
}
return 0;
}
+33
View File
@@ -0,0 +1,33 @@
#ifndef T_TREEITEM_H
#define T_TREEITEM_H
#include <QModelIndex>
#include <QObject>
#include "stdafx.h"
class T_TreeItem : public QObject
{
Q_OBJECT
Q_PROPERTY_CREATE(QList<T_TreeItem*>, ChildrenItems)
Q_PROPERTY_CREATE(bool, IsChecked)
Q_PRIVATE_CREATE(T_TreeItem*, ParentItem)
public:
explicit T_TreeItem(QString itemTitle, T_TreeItem* parent = nullptr);
~T_TreeItem();
QString getItemKey() const;
QString getItemTitle() const;
void setChildChecked(bool isChecked);
Qt::CheckState getChildCheckState();
void appendChildItem(T_TreeItem* childItem);
bool getIsHasChild() const;
int getRow() const;
private:
QString _itemKey = "";
QString _itemTitle = "";
bool _isExpanded{false};
};
#endif // T_TREEITEM_H
@@ -0,0 +1,169 @@
#include "T_TreeViewModel.h"
#include <QIcon>
#include "T_TreeItem.h"
T_TreeViewModel::T_TreeViewModel(QObject* parent)
: QAbstractItemModel{parent}
{
_rootItem = new T_TreeItem("root");
for (int i = 0; i < 20; i++)
{
T_TreeItem* level1Item = new T_TreeItem(QString("Lv1--TreeItem%1").arg(i + 1), _rootItem);
for (int j = 0; j < 6; j++)
{
T_TreeItem* level2Item = new T_TreeItem(QString("Lv2--TreeItem%1").arg(j + 1), level1Item);
for (int k = 0; k < 6; k++)
{
T_TreeItem* level3Item = new T_TreeItem(QString("Lv3--TreeItem%1").arg(k + 1), level2Item);
for (int l = 0; l < 6; l++)
{
T_TreeItem* level4Item = new T_TreeItem(QString("Lv4--TreeItem%1").arg(l + 1), level3Item);
level3Item->appendChildItem(level4Item);
_itemsMap.insert(level4Item->getItemKey(), level4Item);
}
level2Item->appendChildItem(level3Item);
_itemsMap.insert(level3Item->getItemKey(), level3Item);
}
level1Item->appendChildItem(level2Item);
_itemsMap.insert(level2Item->getItemKey(), level2Item);
}
_rootItem->appendChildItem(level1Item);
_itemsMap.insert(level1Item->getItemKey(), level1Item);
}
}
T_TreeViewModel::~T_TreeViewModel()
{
delete _rootItem;
}
QModelIndex T_TreeViewModel::parent(const QModelIndex& child) const
{
if (!child.isValid())
{
return QModelIndex();
}
T_TreeItem* childItem = static_cast<T_TreeItem*>(child.internalPointer());
T_TreeItem* parentItem = childItem->getParentItem();
if (parentItem == _rootItem)
{
return QModelIndex();
}
else if (parentItem == nullptr)
{
return QModelIndex();
}
return createIndex(parentItem->getRow(), 0, parentItem);
}
QModelIndex T_TreeViewModel::index(int row, int column, const QModelIndex& parent) const
{
if (!hasIndex(row, column, parent))
{
return QModelIndex();
}
T_TreeItem* parentItem;
if (!parent.isValid())
{
parentItem = _rootItem;
}
else
{
parentItem = static_cast<T_TreeItem*>(parent.internalPointer());
}
T_TreeItem* childItem = nullptr;
if (parentItem->getChildrenItems().count() > row)
{
childItem = parentItem->getChildrenItems().at(row);
}
if (childItem)
{
return createIndex(row, column, childItem);
}
return QModelIndex();
}
int T_TreeViewModel::rowCount(const QModelIndex& parent) const
{
T_TreeItem* parentItem;
if (parent.column() > 0)
{
return 0;
}
if (!parent.isValid())
{
parentItem = _rootItem;
}
else
{
parentItem = static_cast<T_TreeItem*>(parent.internalPointer());
}
return parentItem->getChildrenItems().count();
}
int T_TreeViewModel::columnCount(const QModelIndex& parent) const
{
Q_UNUSED(parent)
return 1;
}
QVariant T_TreeViewModel::data(const QModelIndex& index, int role) const
{
if (role == Qt::DisplayRole)
{
return static_cast<T_TreeItem*>(index.internalPointer())->getItemTitle();
}
else if (role == Qt::DecorationRole)
{
return QIcon(":/Resource/Image/Cirno.jpg");
}
else if (role == Qt::CheckStateRole)
{
T_TreeItem* item = static_cast<T_TreeItem*>(index.internalPointer());
if (item->getIsHasChild())
{
return item->getChildCheckState();
}
else
{
return item->getIsChecked() ? Qt::Checked : Qt::Unchecked;
}
return Qt::Unchecked;
}
return QVariant();
}
bool T_TreeViewModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
if (role == Qt::CheckStateRole)
{
T_TreeItem* item = static_cast<T_TreeItem*>(index.internalPointer());
item->setIsChecked(!item->getIsChecked());
item->setChildChecked(item->getIsChecked());
Q_EMIT dataChanged(QModelIndex(), QModelIndex(), {role});
return true;
}
return QAbstractItemModel::setData(index, value, role);
}
Qt::ItemFlags T_TreeViewModel::flags(const QModelIndex& index) const
{
Qt::ItemFlags flags = QAbstractItemModel::flags(index);
flags |= Qt::ItemIsUserCheckable;
return flags;
}
QVariant T_TreeViewModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
{
return QString("ElaTreeView-Example-4Level");
}
return QAbstractItemModel::headerData(section, orientation, role);
}
int T_TreeViewModel::getItemCount() const
{
return this->_itemsMap.count();
}
@@ -0,0 +1,30 @@
#ifndef T_TREEVIEWMODEL_H
#define T_TREEVIEWMODEL_H
#include <QAbstractItemModel>
#include <QObject>
class T_TreeItem;
class T_TreeViewModel : public QAbstractItemModel
{
Q_OBJECT
public:
explicit T_TreeViewModel(QObject* parent = nullptr);
~T_TreeViewModel();
QModelIndex parent(const QModelIndex& child) const override;
QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
int getItemCount() const;
private:
QMap<QString, T_TreeItem*> _itemsMap;
T_TreeItem* _rootItem{nullptr};
};
#endif // T_TREEVIEWMODEL_H
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Some files were not shown because too many files have changed in this diff Show More