# FluentUIStyle
**Repository Path**: xwadmin/FluentUIStyle
## Basic Information
- **Project Name**: FluentUIStyle
- **Description**: 仅供学习,镜像加速,FluentUI3Style基于QProxyStyle实现,完整实现了FluentUI3 UI风格,使用到项目中超简单。通过编译成Qt样式插件,可直接在项目中使用app.setStyle("FluentUI3")来应用样式,无需手动加载库或链接源码。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-05-02
- **Last Updated**: 2026-05-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FluentUI3Style:基于Qt的FluentUI3风格实现
**English:** [README_EN.md](README_EN.md)
## 预览
## QDesigner展示
## 项目简介
FluentUI3Style基于QProxyStyle实现,完整实现了FluentUI3 UI风格,使用到项目中超简单。通过编译成Qt样式插件,可直接在项目中使用`app.setStyle("FluentUI3")`来应用样式,无需手动加载库或链接源码。
### 项目定位说明
本项目定位为样式库,目标是将 Qt 现有控件呈现为 FluentUI(WinUI3)风格。
由于 Qt 组件边界限制,部分 FluentUI 控件无法完全复刻;但会尽量基于现有控件,通过 Style 中的定制逻辑实现接近 FluentUI 的交互与视觉效果,例如:
- SwitchButton
- TabBar实现"Pivot"和"Segmented"控件
为了让 "Example" 展示更完整,会在 ExWidgets 下实现一些组件;这些组件的样式仍由 Style 统一绘制。
后续可能会增加其他控件,但都会保证这些组件能独立于Style之外运行。
若想修改控件样式,只能通过以往使用QSS的方式,那样会使控件的QStyle样式消失。
如需深度定制,建议像本项目一样重写对应的 QStyle 逻辑,不过深度定制是【ElaWidgetTools】组件库的功能了,对于本项目不是很合适,本项目只是样式库。
所以如果需要统一样式,或者在统一样式下做一些小改动,推荐本项目。
最后,本项目是为了在现有项目中,或者希望简单集成FluentUI样式时使用而实现。
PS:关于本项目自定义控件的问题,如果不改源码的话,本项目没有提供自定义组件的功能,因为本项目写的样式Style与Qt自带的"windowsvista", "Windows", "Fusion"使用方式完全一致,
所以要自定义的话,就跟我们平常对Qt组件改样式的方法一样,qss或者定制qstyle。后续会使用对控件 setProperty的方式,放开一些属性可设。
祝各位Qter能做出完美的Qt程序。
### 插件优势
- **自动部署**:CMake或QMake编译时会自动将样式插件拷贝到对应的Qt目录
- **即插即用**:项目中使用时直接调用`app.setStyle("FluentUI3")`
- **无需依赖**:不需要在项目中链接源码或手动加载库文件
### 使用说明
- **版本兼容性**:目前在Qt5.14.2、Qt5.15.2、Qt6.5.3(MSVC环境)下测试正常
- **MinGW注意**:在MinGW环境下,菜单弹出可能需要特殊处理
- **版本差异**:不同Qt版本间的差异主要体现在右键菜单的显示效果上,可能存在渲染或布局的细微差别
- **兼容性建议**:由于Qt版本众多且自身兼容性差异,建议在使用时针对具体版本进行适当调整。完全兼容所有Qt版本不现实,但会确保对Qt最新稳定版的支持
### Qt版本兼容性
| Qt版本 | 状态 | 备注 |
| -------- | ---- | --- |
| Qt5.14.2 | ✅ 支持 | 已测试 |
| Qt5.15.2 | ✅ 支持 | 已测试 |
| Qt6.6.3 | ✅ 支持 | 已测试 |
| Qt6.10 | ✅ 支持 | 已测试 |
## 编译步骤(详细)
### 一、准备环境
- 操作系统:建议 Windows 10/11
- 编译器:MSVC(与 Qt 套件保持一致)
- Qt:建议使用已测试版本(如 Qt 6.6.3)
- CMake:建议 3.16+
> 说明:请确保 `cmake`、`ninja`(如使用)和 Qt 对应工具链在同一套环境中,避免出现“头文件版本与 moc 版本不一致”问题。
---
### 二、使用 CMake 编译(推荐)
#### 1) 进入项目目录
```powershell
cd D:/workspace/Code/Github/Window11Style
```
#### 2) 配置工程
```powershell
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH="D:/app/Qt/Qt6.6.3/6.6.3/msvc2019_64"
```
如果你希望更明确地指定 Qt 包目录,也可以加上:
```powershell
-DQt6_DIR="D:/app/Qt/Qt6.6.3/6.6.3/msvc2019_64/lib/cmake/Qt6"
```
#### 3) 编译
```powershell
cmake --build build --config Debug
```
或 Release:
```powershell
cmake --build build --config Release
```
#### 4) 运行示例
```powershell
./build/bin/Exampled.exe # Debug
./build/bin/Example.exe # Release
```
#### 5) 关键构建选项(CMake)
- `BUILD_LIBRARY`:编译样式库(默认 ON)
- `BUILD_PLUGIN`:编译 Qt Style 插件(默认 ON)
- `BUILD_EXAMPLE`:编译示例程序(默认 ON)
例如只编译库和插件、不编译示例:
```powershell
cmake -S . -B build -DBUILD_EXAMPLE=OFF
```
---
### 三、使用 qmake 编译
项目根目录提供了 `fluentw3uistyle.pro`(`subdirs` 工程):
```powershell
cd D:/workspace/Code/Github/Window11Style
qmake fluentw3uistyle.pro
nmake
```
或在 Qt Creator 中直接打开 `fluentw3uistyle.pro`,选择对应 Kit 后编译。
---
### 四、插件部署说明
当启用插件构建时,构建脚本会自动把样式插件拷贝到 Qt 的 `plugins/styles` 目录。
如果你在自定义环境中使用,也可以手动将生成的插件复制到目标 Qt 环境的 `plugins/styles` 下。
## 如何使用
## 项目接入方式(推荐)
下面是把 `FluentUI3Style` 接入到你自己的 Qt 项目的常见流程。
### 1) 构建并部署插件
先按上面的 CMake 或 qmake 步骤完成构建。构建完成后,插件会自动复制到 Qt 的样式插件目录:
- `QT_INSTALL_PLUGINS/styles`
同时会自动复制属性头文件到:
- `QT_INSTALL_HEADERS/FluentUI3Style/fluentui3styleproperties.h`
> 如果 Qt 安装目录在受保护路径(例如 `Program Files`),复制阶段可能需要管理员权限。
### 2) 项目中启用样式
应用启动后直接使用插件名启用:
```cpp
QApplication app(argc, argv);
app.setStyle("FluentUI3");
```
### 3) 在业务代码里使用属性枚举(推荐)
```cpp
#include
// 或者 include "fluentui3styleproperties.h"
```
然后通过 `setProperty` 设置控件样式,不建议再写数字魔法值。
### 4) CMake / qmake 工程引用示例
#### CMake(示例)
```cmake
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
add_executable(MyApp main.cpp mainwindow.cpp)
target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
```
#### qmake(示例)
```qmake
QT += core gui widgets
SOURCES += main.cpp mainwindow.cpp
```
只要运行环境能找到 `FluentUI3` 插件(`plugins/styles` 下),业务工程无需显式链接 `FluentUI3Style` 库即可使用 `app.setStyle("FluentUI3")`。
### 方式 1:直接在代码中创建样式实例
```cpp
#include "fluentui3style.h"
QApplication app(argc, argv);
app.setStyle(new FluentUI3Style);
```
适用场景:
- 你以源码或库形式集成样式
- 不依赖 Qt 插件机制
### 方式 2:通过插件名加载(推荐)
```cpp
QApplication app(argc, argv);
app.setStyle("FluentUI3");
```
适用场景:
- 已构建并部署 `FluentUI3` 样式插件
- 希望主工程最少改动接入
### 方式 3:配合 FluentUIAppearance 初始化(可选)
```cpp
#include "fluentuiappearance.h"
FluentUIAppearance::instance()->initialize();
QApplication app(argc, argv);
```
适用场景:
- 需要更完整的外观初始化流程
- 需要统一主题/配色相关行为
## 支持的控件样式
FluentUI3Style通过属性设置的方式支持以下控件的FluentUI3风格:
| 控件类型 | 控件名称 | 说明 | 属性设置 |
| ---- | -------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 按钮 | QPushButton | 普通按钮 | |
| 按钮 | QCheckBox | 复选框 | `switchButton=true`:启用开关按钮样式 |
| 按钮 | QRadioButton | 单选按钮 | |
| 输入控件 | QLineEdit | 文本框 | 支持底边线动画 |
| 输入控件 | QTextEdit | 文本编辑框 | |
| 输入控件 | QPlainTextEdit | 纯文本编辑框 | |
| 输入控件 | QSpinBox | 数字输入框 | `spinBoxButtonLayout`属性: `0`:垂直箭头(默认) `1`:水平两侧箭头 `2`:水平右侧箭头 `3`:水平两侧加减号 |
| 输入控件 | QDoubleSpinBox | 浮点数输入框 | `spinBoxButtonLayout`属性: `0`:垂直箭头(默认) `1`:水平两侧箭头 `2`:水平右侧箭头 `3`:水平两侧加减号 |
| 选择控件 | QComboBox | 下拉组合框 | 支持下拉动画和阴影效果 |
| 选择控件 | QListWidget | 列表框 | 支持选中指示器动画 |
| 选择控件 | QListView | 列表视图 | 支持选中指示器动画 |
| 滑块 | QSlider | 滑块 | 支持水平和垂直方向 |
| 进度条 | QProgressBar | 进度条 | `progressBarStyle`属性: `0`:细条样式(默认) `1`:粗条样式 `2`:环形样式 |
| 标签页 | QTabBar | 标签栏 | `tabBarStyle`属性: `1`:Capsule `2`:Pivot_Grow `3`:Pivot_Slide `4`:Pivot_Stretch `5`:PillTabs `6`:Segmented_Slide `7`:Segmented_Fade `8`:Navigation `9`:Segmented_WinUI3 |
| 标签页 | QTabWidget | 标签页组件 | 继承QTabBar的样式设置 |
| 滚动条 | QScrollBar | 滚动条 | 支持水平和垂直方向 |
| 滚动条 | QScrollArea | 滚动区域 | |
| 菜单 | QMenu | 上下文菜单 | 支持阴影效果 |
| 菜单 | QMenuBar | 菜单栏 | |
| 对话框 | QMessageBox | 消息框 | |
| 对话框 | QFileDialog | 文件对话框 | |
| 工具栏 | QToolButton | 工具按钮 | 支持菜单箭头动画 |
| 工具栏 | QToolBar | 工具栏 | |
| 树形控件 | QTreeView | 树型视图 | 支持FluentUI导航控件样式 |
| 表格控件 | QTableView | 表格视图 | |
| 表格控件 | QTableWidget | 表格组件 | |
## 使用方法
### 控件属性设置示例(来自 Example/MainWindow)
建议优先使用 `fluentui3styleproperties.h` 里的属性名常量和枚举值,而不是直接写数字。
```cpp
#include
// ProgressBar:粗条样式
ui->progressBar->setProperty(ProgressBarStyleProperty, ProgressBarThick);
// TabBar:WinUI3 Segmented 样式
ui->tabBar->setProperty(TabBarStyleProperty, Segmented_WinUI3);
// TabBar:其他样式
pillBar->setProperty(TabBarStyleProperty, PillTabs);
capTabBar->setProperty(TabBarStyleProperty, Capsule);
navTabBar->setProperty(TabBarStyleProperty, Navigation);
// SpinBox 按钮布局(当前属性名仍是字符串)
ui->spinBox->setProperty("spinBoxButtonLayout", ArrowsVertical);
ui->spinBox->setProperty("spinBoxButtonLayout", ArrowsHorizontalSides);
ui->spinBox->setProperty("spinBoxButtonLayout", ArrowsHorizontalRight);
ui->spinBox->setProperty("spinBoxButtonLayout", PlusMinusHorizontalSides);
// CheckBox 开关样式
checkBox->setProperty(SwitchStyleProperty, true);
```
常用属性速查:
- `TabBarStyleProperty`:`QTabBar` 风格(Capsule / Pivot / Segmented / Navigation)
- `ProgressBarStyleProperty`:`QProgressBar` 风格(Thin / Thick / Ring)
- `SwitchStyleProperty`:`QCheckBox` 切换开关样式
- `ButtonAccentStyleProperty`:按钮 Accent 色风格
- `NavigationViewStyleProperty`:导航指示器样式
- `NoRoundedCorners`:关闭圆角样式
### 方法1:直接创建实例
```cpp
#include "fluentui3style.h"
QApplication app(argc, argv);
app.setStyle(new FluentUI3Style);
```
### 方法2:通过插件加载(推荐)
```cpp
QApplication app(argc, argv);
app.setStyle("FluentUI3");
```
### 方法3:使用FluentUIAppearance
```cpp
#include "fluentuiappearance.h"
// 初始化FluentUI外观
FluentUIAppearance::instance()->initialize();
QApplication app(argc, argv);
```
## 技术实现
### 1. 代码来源
FluentUI3Style是基于Qt 6.10自带的Windows 11样式代码移植而来,在此基础上进行了大量的修复和优化:
- 修复了多个控件的显示问题
- 调整了控件大小和布局,使其更符合FluentUI3的设计规范
- 优化了动画效果和性能
- 增强了跨版本兼容性
- 其他问题
### 2. 颜色体系
定义了完整的FluentUI3颜色体系,包括:
- Light主题颜色方案
- Dark主题颜色方案
- 各种状态下的控件颜色(默认、悬停、按下、禁用)
- 文本颜色
- 边框颜色
- 支持Fluent和Teams两种配色方案
### 3. 图标支持
使用Segoe Fluent Icons字体作为图标源,实现了FluentUI3风格的图标显示。
### 4. 主题检测
自动检测系统主题设置,在Windows 11上使用系统API获取当前主题,在其他系统上使用默认Light主题。
## 编译选项
- **BUILD_LIBRARY**:编译为静态库(默认ON)
- **BUILD_PLUGIN**:编译为Qt插件(默认OFF)
- **BUILD_EXAMPLE**:编译示例应用(默认ON)
## 示例效果
## 未来计划
- 支持更多FluentUI3控件
- 增强自定义主题能力
- 优化性能和动画效果
- 提供更多配色方案
## 致谢
本项目在界面布局与交互设计方面参考了以下优秀项目:
- [WinUI-Gallery](https://github.com/microsoft/WinUI-Gallery.git)
- [FluentUI](https://github.com/zhuzichu520/FluentUI)
- [ElaWidgetTools](https://github.com/Liniyous/ElaWidgetTools)
## 协议说明
FluentUI3Style 采用 MIT 许可证开源,允许所有类型项目使用,但要求所有分发的软件中必须保留本项目的MIT授权许可;所有未保留授权分发的商业行为均将被视为侵权行为。