产品概览

Qt-UI WidgetKit 产品概览

WidgetKit 是面向 Qt Widgets 项目的自定义控件库,聚焦工业软件、业务系统、设备控制台和数据面板中的高频控件。

适用场景

  • 数据看板与实时监控。
  • 设备参数配置与状态展示。
  • 内部业务系统的产品化界面。
  • 需要统一交互和视觉规范的 Qt 项目。

核心内容

  • 按钮、复选框等基础控件增强。
  • 仪表盘、状态卡片、图表容器等业务控件。
  • 统一主题、尺寸、状态和参数接口。
  • 示例工程和接入说明。

基类和类图

WidgetKit 控件通常在 Qt 原生控件基础上扩展绘制、主题、布局比例和 JSON 序列化能力。大多数控件同时实现 IUIGQWidgetBase,内部再持有 UIGQWidgetBase 通用数据对象和对应的 *Impl 绘制/逻辑实现对象。

QObject
  └─ QWidget
      ├─ QPushButton
      │   └─ UIGQPushButton + IUIGQWidgetBase
      │       └─ UIGQRibbonPushButton
      ├─ QCheckBox
      │   └─ UIGQCheckBox + IUIGQWidgetBase
      ├─ QRadioButton
      │   └─ UIGQRadioButton + IUIGQWidgetBase
      ├─ QLineEdit
      │   └─ UIGQLineEdit + IUIGQWidgetBase
      ├─ QTextEdit
      │   └─ UIGQTextEdit + IUIGQWidgetBase
      ├─ QComboBox
      │   └─ UIGQComboBox + IUIGQWidgetBase
      ├─ QTableView
      │   └─ UIGQTableView + IUIGQWidgetBase
      ├─ QTreeView
      │   └─ UIGQTreeView + IUIGQWidgetBase
      ├─ QScrollArea
      │   └─ UIGQScrollView + IUIGQWidgetBase
      │       └─ UIGQPropertyList
      ├─ QLabel
      │   ├─ UIGQLabel + IUIGQWidgetBase
      │   └─ UIGQLabelEx + IUIGQWidgetBase
      ├─ QOpenGLWidget
      │   ├─ UIGQOpenGLWidget
      │   └─ UIGQOGLWidget
      ├─ UIGQContainer + IUIGQWidgetBase
      ├─ UIGQStackContainer + IUIGQWidgetBase
      ├─ UIGQTabWidget + IUIGQWidgetBase
      ├─ UIGQRibbonBar + IUIGQWidgetBase
      ├─ UIGQImage + IUIGQWidgetBase
      ├─ UIGQCanvas + IUIGQWidgetBase
      └─ UIGQSwitch + IUIGQWidgetBase

IUIGQWidgetBase 提供统一的主题、布局比例、透明度、JSON 读写和类型名接口;UIGQWidgetBase 保存这些通用状态;具体控件的 *Impl 类负责状态绘制、主题解析和控件专属属性。

快速接入

快速接入

本章说明 WidgetKit 的基础接入流程。

基础流程

  1. 将 WidgetKit 控件源码或库文件加入项目。
  2. 配置 include 路径和链接库。
  3. 在页面中创建控件实例。
  4. 设置主题、状态和业务数据。

CMake 示例

target_include_directories(app PRIVATE path/to/widgetkit/include)
target_link_libraries(app PRIVATE Qt6::Widgets QtUiWidgetKit)

使用建议

  • 先从示例工程确认控件效果。
  • 再按业务模块逐步替换项目中的自定义控件。
  • 统一在应用启动处设置主题参数。

使用指南

WidgetKit 使用指南

本章参考 UIGearsWidgetKit 示例程序,说明如何初始化控件库、加载皮肤和主题、创建 Ribbon 导航,并在页面中使用 UIGQ* 自定义控件。

运行示例程序

WidgetKit 示例工程位于仓库根目录的 UIGearsWidgetKit,构建目标名称为 UIGearsWidgetKit

cmake --build build_msvc_debug --config Debug --target UIGearsWidgetKit --parallel
build_msvc_debug/bin/Debug/UIGearsWidgetKit.exe

构建后会复制运行所需资源:

  • ThemeShow:皮肤工程目录。
  • theme1theme2theme3:主题目录。
  • ribbon.json:顶部 Ribbon 的页面、分组和按钮配置。

初始化流程

示例程序在 main.cpp 中使用目录加载方式初始化运行环境:

QApplication a(argc, argv);

UIGQtLib::init();
UIGQtLib::uigSetSkinFilePath("./ThemeShow");
UIGQtLib::uigLoadThemeDir("./theme3");

UIGearsWidgetKit w;
w.show();

int ret = a.exec();
UIGQtLib::shutdown();
return ret;

实际项目中建议保持同样顺序:先初始化库,再设置皮肤目录,再加载主题目录,最后创建窗口。

创建页面

示例窗口继承 UIGQWindow,先通过皮肤文件创建基础窗口,再在内容容器里创建控件页面。

UIGQtLib::uigCreatePageByFileName(this, "main");

_container = findChild<UIGQContainer*>("container");
_close = findChild<UIGQPushButton*>("close");
_min = findChild<UIGQPushButton*>("min");

关键控件建议做空指针检查。皮肤文件缺失或对象名变化时,应给出错误提示,而不是继续访问空指针。

设置主题名

WidgetKit 控件通过 setThemeName(...) 绑定主题项。示例中常见写法如下:

UIGQPushButton* button = new UIGQPushButton(parent);
button->setThemeName(UIG_THEME_TEXT_BUTTON);

UIGQComboBox* combo = new UIGQComboBox(parent);
combo->setThemeName(UIG_THEME_TEXT_COMBOBOX);

UIGQScrollBar* scrollBar = new UIGQScrollBar(parent);
scrollBar->setThemeName(UIG_THEME_SCROLLBAR_VERTICAL);

主题切换后,资源管理器会刷新已注册控件。业务代码只需要保持控件使用统一的主题名。

Ribbon 导航

示例中顶部导航使用 UIGQRibbonBar,配置来自 ribbon.json

_navigationRibbon = new UIGQRibbonBar(this);
_navigationRibbon->setThemeName(UIGQRibbonBar::typeName());
_navigationRibbon->setGeometry(0, 50, 950, 130);
_navigationRibbon->loadConfigFile("./ribbon.json");

ribbon.json 支持页签、分组和内容项:

{
  "topBarHeight": 34,
  "tabHeight": 30,
  "groupHeight": 76,
  "groupRowCount": 3,
  "tabs": [
    {
      "name": "home",
      "displayName": "开始",
      "groups": [
        {
          "name": "clipboard",
          "displayName": "剪贴板",
          "content": [
            { "itemType": "largeButton", "name": "navButton", "text": "按钮" },
            { "itemType": "smallButton", "name": "navCheck", "text": "复选" }
          ]
        }
      ]
    }
  ]
}

常用 itemType 包括:

  • largeButton
  • smallButton
  • menuButton
  • comboBox
  • progressBar
  • checkBox
  • radioButton
  • label
  • lineEdit
  • spinBox
  • switch
  • separator

Ribbon 按钮可以通过对象名查找并连接业务页面:

UIGQPushButton* button = _navigationRibbon->findChild<UIGQPushButton*>("navButton");
connect(button, &QPushButton::clicked, this, [this]() {
    showPage(_buttonShowWin);
});

页面切换

示例里每个控件类别都是一个 UIGQContainer 页面,点击 Ribbon 按钮时只显示目标页面:

void showPage(UIGQContainer* page)
{
    const QObjectList& list = _container->children();
    for (QObject* object : list) {
        QWidget* widget = qobject_cast<QWidget*>(object);
        if (widget) {
            widget->setVisible(widget == page);
        }
    }
}

这种方式适合控件展示、设置页、工具页等页面数量固定的场景。业务系统也可以替换为 QStackedWidget 或自己的页面管理器。

主题切换

示例提供主题切换弹窗,切换时直接加载不同主题目录:

bool loadThemeDir(const QString& themeDir)
{
    QByteArray themePath = themeDir.toLocal8Bit();
    return UIGQtLib::uigLoadThemeDir(themePath.constData());
}

运行目录下保留 theme1theme2theme3 后,就可以在运行时切换风格。新增主题时,建议复制一套已有主题目录,再调整 theme.jsonstyle.json 和图片资源。

接入建议

  • 先运行 UIGearsWidgetKit demo,确认皮肤、主题和 Ribbon 配置能正常加载。
  • 页面内优先使用 UIGQContainerUIGQPushButtonUIGQComboBoxUIGQCheckBoxUIGQRadioButtonUIGQTableView 等内部控件。
  • findChild 的关键结果做空指针保护。
  • 资源目录使用相对运行目录的路径,便于发布和调试。
  • 自定义 Ribbon 内容优先改 ribbon.json,只有新增控件类型或交互模型时再扩展 UIGQRibbonBar

SVG 图标

UIGearsWidgetKit 示例已经演示了 SVG 在按钮、复选框/单选框图标、ComboBox 下拉按钮、标签页图标、滚动条箭头与滑块、表格单元格图标以及 Ribbon 快捷操作中的用法。可查看专门的 SVG 图标章节获取可直接复制的示例。

AI Skills 接入

WidgetKit AI Skills 接入

WidgetKit Skill 是给 AI 助手使用的控件库知识包,包含 UIGQ 控件体系、主题 JSON、容器布局、按钮/图标状态、SVG 颜色、滚动条、序列化和常见排查规则。它适合让 AI 生成或修改 WidgetKit 页面、主题配置和控件代码。

下载

目录结构

uigears-widgetkit/
  SKILL.md
  agents/openai.yaml
  references/
    integration.md
    api-reference.md

适合的 AI 任务

  • 生成 WidgetKit 初始化代码和资源加载流程。
  • 使用 UIGQContainerUIGQPushButtonUIGQLineEdit 等控件组装页面。
  • 编写或检查 theme.jsonstyle.json
  • 将可复用视觉样式迁移到主题配置。
  • 排查 SVG 图标、按钮 hover、fade、滚动条方向、布局比例和绝对停靠问题。
  • 生成控件 JSON 属性说明和序列化实现建议。

接入步骤

  1. 下载并解压 qt-ui-uigears-widgetkit-skill.zip
  2. uigears-widgetkit 放到 AI 工具可读取的 skills 目录。
  3. 需求中明确要求 AI 使用 WidgetKit,例如“使用 UIGears WidgetKit 控件实现这个设置页”。
  4. 新项目接入时先让 AI 读取 references/integration.md
  5. 修改控件 API、主题 JSON 或布局问题时,让 AI 读取 references/api-reference.md

示例提示词

使用 uigears-widgetkit skill,帮我用 UIGQContainer 和 UIGQPushButton 实现一个顶部工具栏,样式通过 theme.json/style.json 配置。
使用 uigears-widgetkit skill,检查这个按钮设置 SVG icon 后为什么显示为黑色,并给出修复建议。

生成代码时的约束

  • 初始化顺序保持为 UIGQtLib::init()、设置皮肤目录、加载主题目录、创建窗口。
  • WidgetKit 页面优先使用 UIGQ* 控件,不随意混入普通 QWidget + QLayout
  • 可复用外观优先落到 theme.jsonstyle.json
  • setDrawBackground(false) 这类绘制行为可以保留在 C++。
  • 主题切换不应意外改变布局尺寸,除非主题项明确配置了几何字段。

布局与容器控件

布局与容器控件

布局控件负责组织页面结构、尺寸策略、滚动区域和多页面切换。建议先用 UIGQContainer 搭出页面骨架,再根据内容复杂度引入 UIGQScrollViewUIGQStackContainerUIGQSplitter 等控件。

控件类型

控件 子内容与能力 典型用途
UIGQContainer 子控件布局、内边距、间距、绝对停靠、自动计算绝对停靠尺寸、主题背景 页面骨架、卡片、工具区、标题栏右侧区域
UIGQStackContainer 多页面集合、当前页切换、页面尺寸同步 dashboard、设置页、工作区视图切换
UIGQScrollView 内容窗口、水平/垂直滚动条、滚动条主题和尺寸 长表单、列表面板、可滚动内容区
UIGQSplitter 可拖动分隔条、左右/上下区域 主从面板、属性区、可调整工作区
UIGQSpacer 弹性占位、固定占位 推开控件、对齐工具栏内容
UIGQGroupBox 标题、边框、分组内容区 表单分组、设置分组、视觉归类

类继承关系

QWidget
  ├─ UIGQContainer + IUIGQWidgetBase
  ├─ UIGQStackContainer + IUIGQWidgetBase
  ├─ QScrollArea
  │   └─ UIGQScrollView + IUIGQWidgetBase
  │       └─ UIGQPropertyList
  ├─ UIGQSplitter + IUIGQWidgetBase
  ├─ UIGQSpacer + IUIGQWidgetBase
  └─ UIGQGroupBox + IUIGQWidgetBase

布局控件以 QWidget 或 Qt 滚动区域为基础,使用 IUIGQWidgetBase 接入主题、布局比例、尺寸策略和基础序列化能力。UIGQPropertyList 继承自 UIGQScrollView,因此也复用滚动区域能力。

UIGQContainer

UIGQContainer 是 WidgetKit 最常用的布局容器,支持横向、纵向、流式布局和绝对停靠。可通过主题名读取当前主题中的背景样式,也可以通过 C++ 直接设置布局参数。

UIGQContainer* card = new UIGQContainer(parent);
card->setObjectName("settingsCard");
card->setThemeName("CardBg");
card->setChildLayout(UIGQContainer::kVertical);
card->setChildSpace(12);
card->setChildPadding(16, 16, 16, 16);
card->addChildWidget(titleLabel);
card->addChildWidget(formArea, 1);

绝对停靠常用于标题栏按钮、用户信息、浮动工具条等不参与主布局计算的控件。

UIGQContainer* profile = new UIGQContainer(parent);
profile->setChildLayout(UIGQContainer::kHorizontal);
profile->setAbsoluteDock(UIG_RIGHT_BOTTOM, UIG_LEFT_TOP, -184, 8);
profile->setAbsoluteDockAutoSize(true);

常用接口:

接口 说明 参数 返回值
setChildLayout(AutoChildLayout layout) 设置子控件排列方式。 layout:横向、纵向、横向流式、纵向流式等布局枚举。 void
setChildSpace(int space) 设置子控件间距。 space:间距像素。 void
setChildPadding(int left, int top, int right, int bottom) 设置容器内边距。 四个方向的像素值。 void
addChildWidget(QWidget* widget, int ratio = 0) 添加子控件并可设置布局比例。 widget:子控件;ratio:占比权重。 void
removeChildWidget(QWidget* widget) 从容器布局中移除子控件。 widget:目标子控件。 void
setThemeName(const QString& themeName) 绑定主题名。 themeName:主题配置名称。 void
setDrawBackground(bool draw) 控制是否绘制容器背景。 draw:是否绘制背景。 void
setAbsoluteDock(DockLayoutType hor, DockLayoutType ver, int offsetX = 0, int offsetY = 0) 设置绝对停靠位置和偏移。 hor/ver:水平与垂直停靠;offsetX/offsetY:偏移。 void
setAbsoluteDockAutoSize(bool enabled) 绝对停靠时按子控件计算合适尺寸。 enabled:是否启用自动尺寸。 void
forceResize() 立即重新计算布局和子控件尺寸。 void

UIGQStackContainer

UIGQStackContainer 用于在一个固定区域内切换多个页面。页面尺寸会跟随当前容器刷新,适合 dashboard、设置页、工作台页签等场景。

UIGQStackContainer* stack = new UIGQStackContainer(parent);
stack->setThemeName("WorkspaceBg");
stack->addWidget(dashboardPage);
stack->addWidget(settingsPage);
stack->setCurrentIndex(0);

常用接口:

接口 说明 参数 返回值
addWidget(QWidget* widget) 添加页面。 widget:要添加的页面控件。 int
insertWidget(int index, QWidget* widget) 插入页面。 index:插入位置;widget:页面控件。 int
removeWidget(QWidget* widget) 移除页面。 widget:要移除的页面控件。 void
setCurrentIndex(int index) 切换当前页。 index:目标页面索引。 void
currentIndex() const 获取当前页索引。 int
currentWidget() const 获取当前页控件。 QWidget*
widget(int index) const 获取指定页面。 index:页面索引。 QWidget*

UIGQScrollView

UIGQScrollView 封装滚动区域和自绘滚动条,适合长内容页面。水平滚动条和垂直滚动条应分别设置方向与主题,避免横纵样式混用。

UIGQScrollView* scroll = new UIGQScrollView(parent);
scroll->setThemeName("FormScrollView");
scroll->setScrollbarSize(false, 12); // vertical
scroll->setScrollbarSize(true, 12);  // horizontal
scroll->setVScrollPos(0);

常用接口:

接口 说明 参数 返回值
setWidget(QWidget* widget) 设置滚动区域内容控件。 widget:内容控件。 void
widget() const 获取内容控件。 QWidget*
setWidgetResizable(bool resizable) 设置内容控件是否随视口变化。 resizable:是否自适应。 void
setVScrollPos(int value) 设置垂直滚动位置。 value:滚动值。 void
setHScrollPos(int value) 设置水平滚动位置。 value:滚动值。 void
setScrollbarSize(bool isHorizontal, int size) 设置滚动条厚度。 isHorizontal:是否水平滚动条;size:厚度。 void
setScrollbarBtnSize(bool isHorizontal, int size) 设置滚动条按钮大小。 isHorizontal:是否水平滚动条;size:按钮尺寸。 void
setScrollbarBackgroundStyle(bool isHorizontal, const FillStyle& background) 设置轨道背景。 isHorizontal:方向;background:轨道背景样式。 void
setScrollbarThumbStyle(bool isHorizontal, CtrlState state, const FillStyle& style) 设置滑块状态样式。 isHorizontal:方向;state:状态;style:滑块样式。 void
setScrollbarButtonIcon(bool isHorizontal, bool isUpOrLeft, const QString& iconPath) 设置方向按钮图标。 isHorizontal:方向;isUpOrLeft:上/左按钮;iconPath:图标路径。 void

UIGQSplitter

UIGQSplitter 用于把页面拆成可拖动调整的多个区域。

接口 说明 参数 返回值
addWidget(QWidget* widget) 添加分区控件。 widget:分区内容。 void
insertWidget(int index, QWidget* widget) 插入分区控件。 index:位置;widget:分区内容。 void
setOrientation(Qt::Orientation orientation) 设置横向或纵向拆分。 orientation:方向。 void
setSizes(const QList<int>& list) 设置各分区尺寸。 list:尺寸列表。 void
sizes() const 获取当前分区尺寸。 QList<int>

UIGQSpacer

UIGQSpacer 作为布局占位控件使用,常放在水平工具栏中把右侧按钮推到末尾。

接口 说明 参数 返回值
setLayoutRatio(int ratio) 设置占位权重。 ratio:权重值。 void
setWidthPolicy(LayoutSizePolicy policy) 设置宽度策略。 policy:固定、填充或自动策略。 void
setHeightPolicy(LayoutSizePolicy policy) 设置高度策略。 policy:固定、填充或自动策略。 void
setMinimumSize(int w, int h) 设置最小尺寸。 w/h:尺寸像素。 void

UIGQGroupBox

UIGQGroupBox 用于把相关控件组合到一个带标题的区域中。

接口 说明 参数 返回值
setTitle(const QString& title) 设置分组标题。 title:标题文本。 void
title() const 获取分组标题。 QString
setCheckable(bool checkable) 设置分组是否可勾选。 checkable:是否可勾选。 void
setChecked(bool checked) 设置勾选状态。 checked:是否选中。 void
setThemeName(const QString& themeName) 设置分组主题。 themeName:主题名。 void

使用建议

  • 页面骨架优先使用 UIGQContainer,保持布局树清晰。
  • setThemeName(...) 只负责外观主题,布局尺寸仍建议由布局参数控制。
  • 需要浮在右上、右下的区域使用 setAbsoluteDock(...),内容尺寸不固定时再开启 setAbsoluteDockAutoSize(true)
  • 长内容不要靠父容器裁剪,使用 UIGQScrollView 承载,并分别配置水平、垂直滚动条。

输入控件

输入控件

输入控件负责用户操作、表单录入和参数选择。WidgetKit 的输入控件继承 Qt 原生控件能力,同时增加主题、状态绘制、SVG 图标、布局策略和通用序列化支持。

控件类型

控件 子内容与能力 典型用途
UIGQPushButton 文本、普通/悬停/按下图标、背景状态、fade 高亮、SVG 颜色 操作按钮、图标按钮、工具按钮
UIGQCheckBox 选中/未选中图标、半选状态、文字、状态样式 多选项、批量选择、布尔配置
UIGQRadioButton 单选图标、互斥分组、文字、状态样式 模式切换、分组选择
UIGQSwitch 左右文本、滑块、动画、开关状态 启停选项、轻量布尔配置
UIGQLineEdit 文本、placeholder、密码模式、快捷键模式、内容边距 搜索、密码、快捷键录入
UIGQTextEdit 多行文本、滚动、富文本或纯文本编辑 备注、说明、脚本、日志编辑
UIGQComboBox 下拉项、当前项、项高度、弹出列表样式 枚举值、筛选条件、参数选择
UIGQSpinBox 数值范围、步长、当前值、前后缀 整数输入、步进调整
UIGQSlider 方向、范围、当前值、滑块尺寸、轨道样式 连续数值、比例、阈值调整

类继承关系

QWidget
  ├─ QPushButton
  │   └─ UIGQPushButton + IUIGQWidgetBase
  │       └─ UIGQRibbonPushButton
  ├─ QCheckBox
  │   └─ UIGQCheckBox + IUIGQWidgetBase
  ├─ QRadioButton
  │   └─ UIGQRadioButton + IUIGQWidgetBase
  ├─ UIGQSwitch + IUIGQWidgetBase
  ├─ QLineEdit
  │   └─ UIGQLineEdit + IUIGQWidgetBase
  ├─ QTextEdit
  │   └─ UIGQTextEdit + IUIGQWidgetBase
  ├─ QComboBox
  │   └─ UIGQComboBox + IUIGQWidgetBase
  ├─ QSpinBox
  │   └─ UIGQSpinBox + IUIGQWidgetBase
  └─ QSlider
      └─ UIGQSlider + IUIGQWidgetBase

输入控件继承 Qt 原生交互能力,例如文本输入、选择状态、数值范围和信号槽;IUIGQWidgetBase 负责接入 WidgetKit 的主题、布局比例、透明度等统一能力。

UIGQPushButton

UIGQPushButton 支持 Normal、Hot、Pressed、Disable 状态背景和文字样式,支持 PNG/SVG 图标和 fade 高亮效果。

UIGQPushButton* importButton = new UIGQPushButton(parent);
importButton->setObjectName("importButton");
importButton->setText("Import");
importButton->setThemeName("PrimaryButton");
importButton->setIcon(":/images/import.svg");
importButton->setFadeEnabled(true);

透明图标按钮建议使用不绘制背景的接口:

helpButton->setDrawBackground(false);
helpButton->setIcon(":/images/help.svg");

常用接口:

接口 说明 参数 返回值
setText(const QString& text) 设置按钮文本。 text:显示文本。 void
setThemeName(const QString& themeName) 绑定主题。 themeName:主题名。 void
setIcon(const QString& iconPath) 设置普通图标。 iconPath:资源或文件路径。 void
setHotIcon(const QString& iconPath) 设置悬停图标。 iconPath:悬停状态图标。 void
setPressedIcon(const QString& iconPath) 设置按下图标。 iconPath:按下状态图标。 void
setUseIcon(bool use) 控制是否绘制图标。 use:是否使用图标。 void
setShowText(bool show) 控制是否绘制文本。 show:是否显示文本。 void
setDrawBackground(bool drawBackground) 控制是否绘制按钮背景。 drawBackground:是否绘制背景。 void
setBackground(CtrlState state, const FillStyle& fillStyle) 设置状态背景。 state:状态;fillStyle:背景样式。 void
setTextStyle(CtrlState state, const TextStyleDesc& desc) 设置状态文字样式。 state:状态;desc:文字样式。 void
setFadeEnabled(bool enabled) 设置是否启用渐变高亮。 enabled:是否启用。 void
setFadeDuration(int duration) 设置渐变时间。 duration:毫秒。 void

UIGQCheckBox 和 UIGQRadioButton

UIGQCheckBoxUIGQRadioButton 都支持选中、未选中、禁用和悬停图标,也支持按状态设置文本样式。

UIGQCheckBox* check = new UIGQCheckBox(parent);
check->setText("Remember settings");
check->setThemeName("DefaultCheckBox");
check->setCheckedIcon(":/images/check-on.svg");
check->setUncheckIcon(":/images/check-off.svg");
check->setShowText(true);
check->setShowIcon(true);

常用接口:

接口 说明 参数 返回值
setText(const QString& text) 设置选项文本。 text:显示文本。 void
setChecked(bool checked) 设置选中状态。 checked:是否选中。 void
isChecked() const 获取选中状态。 bool
setTristate(bool tristate) 复选框启用三态。 tristate:是否启用。 void
setCheckedIcon(const QString& iconPath) 设置选中图标。 iconPath:图标路径。 void
setUncheckIcon(const QString& iconPath) 设置未选中图标。 iconPath:图标路径。 void
setShowIcon(bool show) 控制是否绘制图标。 show:是否显示。 void
setShowText(bool show) 控制是否绘制文字。 show:是否显示。 void
setTextStyle(CtrlState state, const TextStyleDesc& desc) 设置文字状态样式。 state:状态;desc:文字样式。 void
toggled(bool checked) Qt 标准信号,状态切换时触发。 checked:当前状态。 void

UIGQSwitch

UIGQSwitch 更适合状态开关,支持滑块大小、边距、动画速度和左右文本。

UIGQSwitch* sw = new UIGQSwitch(parent);
sw->setLeftText("Off");
sw->setRightText("On");
sw->setSwitchToLeft(false);
sw->setSwitchSpeed(180);

常用接口:

接口 说明 参数 返回值
setLeftText(const QString& text) 设置左侧文本。 text:文本。 void
setRightText(const QString& text) 设置右侧文本。 text:文本。 void
setSwitchToLeft(bool left) 设置开关位置。 left:是否位于左侧。 void
getSwitchToLeft() const 获取当前开关位置。 bool
setSwitchSpeed(int speed) 设置切换动画速度。 speed:速度或时长参数。 void
setSliderSize(int width, int height) 设置滑块尺寸。 width/height:尺寸。 void
setSliderMargin(int margin) 设置滑块边距。 margin:边距。 void

UIGQLineEdit 和 UIGQTextEdit

UIGQLineEdit 支持 placeholder、密码模式、快捷键录入模式和内容边距。

UIGQLineEdit* search = new UIGQLineEdit(parent);
search->setThemeName(UIG_THEME_LINE_EDIT);
search->setPlaceholderText("搜索");
search->setEditMargin(8, 8, 12, 12);
search->setHotkeyMode(false);

UIGQTextEdit 用于多行文本,适合备注、日志和脚本文本。

常用接口:

接口 说明 参数 返回值
setText(const QString& text) 设置单行输入文本。 text:文本。 void
text() const 获取单行输入文本。 QString
setPlainText(const QString& text) 设置多行纯文本。 text:文本。 void
toPlainText() const 获取多行纯文本。 QString
setPlaceholderText(const QString& text) 设置提示文本。 text:提示文本。 void
setIsPassword(bool password) 设置密码模式。 password:是否密码模式。 void
setHotkeyMode(bool hotkeyMode) 设置快捷键录入模式。 hotkeyMode:是否启用。 void
setEditMargin(int top, int bottom, int left, int right) 设置内容边距。 四个方向边距。 void
textChanged(const QString& text) 单行文本变化信号。 text:变化后的文本。 void

UIGQComboBox

UIGQComboBox 适合枚举值和过滤条件。

UIGQComboBox* typeBox = new UIGQComboBox(parent);
typeBox->setThemeName("DefaultComboBox");
typeBox->addItem("Basic");
typeBox->addItem("Advanced");
typeBox->setItemHeight(32);

常用接口:

接口 说明 参数 返回值
addItem(const QString& text) 添加一个下拉项。 text:显示文本。 void
addItems(const QStringList& texts) 批量添加下拉项。 texts:文本列表。 void
setCurrentIndex(int index) 设置当前项。 index:项索引。 void
currentIndex() const 获取当前项索引。 int
currentText() const 获取当前项文本。 QString
setItemHeight(int height) 设置下拉项高度。 height:高度像素。 void
currentIndexChanged(int index) 当前项变化信号。 index:新索引。 void

UIGQSpinBox 和 UIGQSlider

UIGQSpinBox 适合精确整数,UIGQSlider 适合连续数值调整。

UIGQSlider* opacity = new UIGQSlider(parent, Qt::Horizontal);
opacity->setThemeName("DefaultSlider");
opacity->setRange(0, 100);
opacity->setValue(60);
opacity->setThumbSize(16, 16);

常用接口:

接口 说明 参数 返回值
setRange(int min, int max) 设置数值范围。 min/max:最小值和最大值。 void
setMinimum(int min) 设置最小值。 min:最小值。 void
setMaximum(int max) 设置最大值。 max:最大值。 void
setValue(int value) 设置当前值。 value:当前值。 void
value() const 获取当前值。 int
setSingleStep(int step) 设置步长。 step:步进值。 void
setOrientation(Qt::Orientation orientation) 设置滑块方向。 orientation:水平或垂直。 void
setThumbSize(int width, int height) 设置滑块尺寸。 width/height:滑块尺寸。 void
valueChanged(int value) 值变化信号。 value:新值。 void

使用建议

  • 业务按钮优先通过 setThemeName(...) 绑定主题,避免在页面代码里硬编码颜色。
  • 图标按钮需要透明背景时使用 setDrawBackground(false)
  • 表单输入建议统一设置 UIGQLineEdit 的边距,避免文字贴边。
  • 开关类配置用 UIGQSwitch,多选集合用 UIGQCheckBox,互斥选项用 UIGQRadioButton

展示控件

展示控件

展示控件用于显示文本、图片、SVG、数值和进度状态。它们通常不负责复杂业务交互,但会承担页面的信息密度、状态表达和主题一致性。

控件类型

控件 子内容与能力 典型用途
UIGQLabel 文本、对齐方式、字体和颜色主题 标题、字段名、说明文字
UIGQLabelEx 扩展文本绘制、状态文本、强调显示 复杂状态文本、提示信息
UIGQImage 位图、GIF、SVG、SVG 原始色或指定色、拉伸绘制 头像、插图、工具图标
UIGQSvgView SVG 文件加载、缩放预览、矢量画布 大图 SVG、流程图、矢量预览
UIGQLCDNumber 数码管显示、位数、模式 仪表读数、设备数值
UIGQProgressBar 线性进度、圆形进度、文本、前景和背景 任务进度、状态百分比

类继承关系

QWidget
  ├─ QLabel
  │   ├─ UIGQLabel + IUIGQWidgetBase
  │   └─ UIGQLabelEx + IUIGQWidgetBase
  ├─ UIGQImage + IUIGQWidgetBase
  ├─ QGraphicsView
  │   └─ UIGQSvgView + IUIGQWidgetBase
  ├─ QLCDNumber
  │   └─ UIGQLCDNumber + IUIGQWidgetBase
  └─ QProgressBar
      └─ UIGQProgressBar + IUIGQWidgetBase

展示控件保留 Qt 原生显示控件的基础行为,同时通过 IUIGQWidgetBase 接入主题样式、布局比例和透明度。

UIGQLabel 和 UIGQLabelEx

UIGQLabel 适合基础文本显示,UIGQLabelEx 适合需要更复杂绘制或状态表达的文本控件。

UIGQLabel* title = new UIGQLabel(parent);
title->setObjectName("pageTitle");
title->setThemeName("TitleText");
title->setText("仪表盘");
title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);

常用接口:

接口 说明 参数 返回值
setText(const QString& text) 设置显示文本。 text:文本。 void
text() const 获取显示文本。 QString
setThemeName(const QString& themeName) 绑定文本主题。 themeName:主题名。 void
setAlignment(Qt::Alignment alignment) 设置文本对齐。 alignment:Qt 对齐标志。 void
setWordWrap(bool on) 设置是否自动换行。 on:是否换行。 void
setPixmap(const QPixmap& pixmap) Qt 标签图片显示。 pixmap:图片对象。 void
setTextStyle(CtrlState state, const TextStyleDesc& style) 设置状态文字样式。 state:状态;style:文字样式。 void

UIGQImage

UIGQImage 支持普通图片、GIF、SVG,并可选择使用 SVG 原始颜色或控件指定颜色。

UIGQImage* avatar = new UIGQImage(parent);
avatar->setImagePath(":/images/avatar.png");
avatar->setStretchDraw(true);

UIGQImage* icon = new UIGQImage(parent);
icon->setSvgPath(":/images/user.svg");
icon->setUseSvgColor(true);
icon->setSvgColor(QColor(31, 111, 235));

当 SVG 本身已经包含设计好的多色信息时,保留原始颜色:

icon->setUseSvgColor(false);

常用接口:

接口 说明 参数 返回值
setImagePath(const QString& path) 设置普通图片路径。 path:资源或文件路径。 void
getImagePath() const 获取图片路径。 QString
setSvgPath(const QString& path) 设置 SVG 图片路径。 path:资源或文件路径。 void
setSvgColor(const QColor& color) 设置 SVG 指定颜色。 color:目标颜色。 void
setUseSvgColor(bool useColor) 控制 SVG 是否使用指定颜色。 useColor:是否启用指定颜色。 void
setStretchDraw(bool stretch) 设置图片是否拉伸绘制。 stretch:是否拉伸。 void
setMoviePath(const QString& path) 设置 GIF 或动画图片路径。 path:动画路径。 void
clear() 清空当前图片。 void

UIGQSvgView

UIGQSvgView 更适合较大 SVG 画布、可缩放图形和带滚动条的 SVG 预览。

UIGQSvgView* svgView = new UIGQSvgView(parent);
svgView->loadSvgFile(":/images/process.svg");
svgView->setThemeName("SvgCanvas");

常用接口:

接口 说明 参数 返回值
loadSvgFile(const QString& path) 加载 SVG 文件。 path:SVG 路径。 bool
setThemeName(const QString& themeName) 设置画布主题。 themeName:主题名。 void
fitInView(...) 按视口缩放 SVG 内容。 Qt 图形视图参数。 void
setScene(QGraphicsScene* scene) 设置图形场景。 scene:场景对象。 void

UIGQLCDNumber

UIGQLCDNumber 用于显示数码管效果的数值。

接口 说明 参数 返回值
display(int value) 显示整数。 value:数值。 void
display(double value) 显示浮点数。 value:数值。 void
display(const QString& value) 显示字符串。 value:文本。 void
setDigitCount(int count) 设置位数。 count:显示位数。 void
setMode(QLCDNumber::Mode mode) 设置显示模式。 mode:十进制、十六进制等。 void
setSegmentStyle(QLCDNumber::SegmentStyle style) 设置数码段样式。 style:段样式。 void

UIGQProgressBar

UIGQProgressBar 支持背景、前景、文本显示和圆形进度。

UIGQProgressBar* progress = new UIGQProgressBar(parent);
progress->setThemeName("DefaultProgress");
progress->setRange(0, 100);
progress->setValue(72);
progress->setShowText(true);
progress->setCircleProgressBar(true);
progress->setCircleAngleRange(90, 360);

常用接口:

接口 说明 参数 返回值
setRange(int min, int max) 设置进度范围。 min/max:最小和最大值。 void
setValue(int value) 设置当前进度。 value:当前值。 void
value() const 获取当前进度。 int
setShowText(bool show) 控制是否显示文字。 show:是否显示。 void
setTextVisible(bool visible) Qt 进度条文字可见性。 visible:是否可见。 void
setCircleProgressBar(bool circle) 设置圆形进度模式。 circle:是否圆形。 void
setCircleAngleRange(int startAngle, int spanAngle) 设置圆形进度角度范围。 startAngle/spanAngle:起始角和范围。 void
setOrientation(Qt::Orientation orientation) 设置线性进度方向。 orientation:水平或垂直。 void

使用建议

  • 图片类控件只负责显示,不建议把点击逻辑和业务状态全部塞进图片控件。
  • 单色 SVG 图标建议启用 setUseSvgColor(true),由主题或代码统一颜色。
  • 多色品牌图、产品图、插图应保留 SVG 原始颜色。
  • 进度控件需要同时表达数值和状态时,配合 UIGQLabel 显示辅助说明。

数据控件

数据控件

数据控件用于展示列表、表格、树和属性面板。它们通常需要同时处理数据模型、滚动条、行高、选中状态和单元格样式。

控件类型

控件 子内容与能力 典型用途
UIGQTableView 表头、行项、复选框列、滚动条、自定义列控件、Model/View 数据 表格、业务列表、明细矩阵
UIGQTreeView 层级节点、表头、行高、展开折叠、滚动条 目录树、组织结构、配置树
UIGQListView 条目模板、选中状态、行高/列宽、滚动条 消息列表、模板列表、结果集合
UIGQList 简单列表项、选中状态、基础列表操作 简单选项列表、轻量数据集合
UIGQPropertyList 属性行、名称值结构、滚动区域 参数面板、对象配置、属性表

类继承关系

QWidget
  ├─ QTableView
  │   └─ UIGQTableView + IUIGQWidgetBase
  ├─ QTreeView
  │   └─ UIGQTreeView + IUIGQWidgetBase
  ├─ QListView
  │   └─ UIGQListView + IUIGQWidgetBase
  ├─ QListWidget
  │   └─ UIGQList + IUIGQWidgetBase
  └─ QScrollArea
      └─ UIGQScrollView + IUIGQWidgetBase
          └─ UIGQPropertyList

数据控件保留 Qt Model/View 或列表控件能力,WidgetKit 扩展表头、滚动条、行项样式、自定义列控件和主题配置。

UIGQTableView

UIGQTableView 基于 QTableView,增加自绘表头、行项样式、复选框列、滚动条样式和自定义列控件。

UIGQTableView* table = new UIGQTableView(parent);
table->setThemeName("DefaultTable");
table->setItemHeight(36);
table->setCheckstyle(true);
table->setScrollbarSize(false, 12);
table->setScrollbarSize(true, 12);
table->setModel(model);

常用接口:

接口 说明 参数 返回值
setModel(QAbstractItemModel* model) 设置表格数据模型。 model:Qt 数据模型。 void
model() const 获取当前数据模型。 QAbstractItemModel*
setItemHeight(int height) 设置行高。 height:行高像素。 void
setCheckstyle(bool enabled) 开启表格复选框样式。 enabled:是否启用。 void
setColumnWidget(int column, UIGQContainer* widget) 为列配置自定义控件。 column:列索引;widget:自定义容器。 void
setScrollbarSize(bool isHorizontal, int size) 设置滚动条厚度。 isHorizontal:是否水平;size:厚度。 void
selectedRows() 获取当前选择行。 QList<int>
selectRow(int row) 选择指定行。 row:行索引。 void
headerCheckedChanged(bool checked) 表头复选框变化信号。 checked:表头是否选中。 void
customControlClicked(int row, QString name) 自定义单元格控件点击信号。 row:行索引;name:控件名称。 void

UIGQTreeView

UIGQTreeView 适合目录、分组、配置树和层级数据,支持表头样式、项样式、行高和滚动条主题。

UIGQTreeView* tree = new UIGQTreeView(parent);
tree->setThemeName("DefaultTree");
tree->setItemHeight(30);
tree->setScrollbarSize(false, 12);
tree->setModel(model);

常用接口:

接口 说明 参数 返回值
setModel(QAbstractItemModel* model) 设置树数据模型。 model:Qt 数据模型。 void
expand(const QModelIndex& index) 展开节点。 index:节点索引。 void
collapse(const QModelIndex& index) 折叠节点。 index:节点索引。 void
expandAll() 展开全部节点。 void
collapseAll() 折叠全部节点。 void
setHeaderHidden(bool hide) 设置是否隐藏表头。 hide:是否隐藏。 void
setItemHeight(int height) 设置节点行高。 height:行高像素。 void
setScrollbarSize(bool isHorizontal, int size) 设置滚动条厚度。 isHorizontal:是否水平;size:厚度。 void

UIGQListView

UIGQListView 适合结果列表、消息列表和卡片式条目。可配置 item 模板、宽高、选中状态和滚动条。

UIGQListView* list = new UIGQListView(parent);
list->setThemeName("DefaultListView");
list->setItemHeight(48);
list->setItemWidth(280);
list->setEnableSelection(true);
list->setModel(model);

常用接口:

接口 说明 参数 返回值
setModel(QAbstractItemModel* model) 设置列表数据模型。 model:Qt 数据模型。 void
setItemHeight(int height) 设置条目高度。 height:高度像素。 void
setItemWidth(int width) 设置条目宽度。 width:宽度像素。 void
setEnableSelection(bool enabled) 设置是否允许选中。 enabled:是否允许。 void
setCurrentIndex(const QModelIndex& index) 设置当前项。 index:模型索引。 void
currentIndex() const 获取当前项。 QModelIndex
clicked(const QModelIndex& index) 条目点击信号。 index:模型索引。 void

UIGQList

UIGQList 是更轻量的列表封装,适合简单项集合。

接口 说明 参数 返回值
addItem(const QString& text) 添加文本项。 text:文本。 void
addItems(const QStringList& labels) 批量添加文本项。 labels:文本列表。 void
clear() 清空列表。 void
setCurrentRow(int row) 设置当前行。 row:行索引。 void
currentRow() const 获取当前行。 int
itemClicked(QListWidgetItem* item) 项点击信号。 item:点击项。 void

UIGQPropertyList

UIGQPropertyList 适合属性编辑和对象参数展示,继承滚动区域能力。

接口 说明 参数 返回值
setThemeName(const QString& themeName) 设置属性表主题。 themeName:主题名。 void
setWidget(QWidget* widget) 设置属性内容容器。 widget:内容控件。 void
setWidgetResizable(bool resizable) 内容是否跟随视口。 resizable:是否自适应。 void
setScrollbarSize(bool isHorizontal, int size) 设置滚动条厚度。 isHorizontal:是否水平;size:厚度。 void

使用建议

  • 大数据列表保持 Qt Model/View 分层,WidgetKit 负责外观和交互一致性。
  • 表格中需要操作按钮时,优先使用自定义列控件,避免把所有操作塞进文本。
  • 横向内容较宽时显式配置水平滚动条主题,避免宽列被挤压。
  • 属性面板适合低频配置,不建议承载大量实时数据。

导航控件

导航控件

导航控件负责页面切换、命令入口、菜单和滚动定位。它们通常出现在页面顶部、侧栏、工具栏或内容容器边缘。

控件类型

控件 子内容与能力 典型用途
UIGQTabWidget 标签项、图标、选中图标、方向、项尺寸和间距 顶部/侧边标签、模块切换
UIGQMenu Action、子菜单、上下文命令、主题外观 右键菜单、命令菜单
UIGQMenuBar 顶层菜单、菜单项、窗口命令入口 窗口级菜单栏
UIGQRibbonBar Ribbon 页面、分组、面板、按钮和配置文件 桌面软件命令区、复杂工具栏
UIGQScrollBar 方向、范围、滑块、按钮、主题样式 独立滚动条、容器绑定滚动

类继承关系

QWidget
  ├─ UIGQTabWidget + IUIGQWidgetBase
  ├─ QMenu
  │   └─ UIGQMenu + IUIGQWidgetBase
  ├─ QMenuBar
  │   └─ UIGQMenuBar + IUIGQWidgetBase
  ├─ UIGQRibbonBar + IUIGQWidgetBase
  │   ├─ UIGQRibbonArea
  │   ├─ UIGQRibbonPage
  │   ├─ UIGQRibbonGroup
  │   └─ UIGQRibbonPanel
  ├─ QPushButton
  │   └─ UIGQPushButton + IUIGQWidgetBase
  │       └─ UIGQRibbonPushButton
  └─ QScrollBar
      └─ UIGQScrollBar + IUIGQWidgetBase

导航控件组合 Qt 菜单、滚动条和 WidgetKit 自绘容器。Ribbon 内部页面、分组和面板主要负责结构组织,UIGQRibbonBarUIGQRibbonPushButton 负责对外的主题与交互入口。

UIGQTabWidget

UIGQTabWidget 支持横向和纵向标签、图标、选中状态、项间距和项尺寸。

UIGQTabWidget* tabs = new UIGQTabWidget(parent);
tabs->setThemeName("DefaultTabs");
tabs->setIsHor(true);
tabs->setItemSize(96);
tabs->setItemSpace(8);
tabs->addTab("概览", ":/images/home.svg", ":/images/home-on.svg");
tabs->addTab("设置", ":/images/settings.svg", ":/images/settings-on.svg");

connect(tabs, &UIGQTabWidget::currentChanged, this, [stack](int index) {
    stack->setCurrentIndex(index);
});

常用接口:

接口 说明 参数 返回值
addTab(const QString& text, const QString& icon, const QString& selectedIcon) 添加标签项。 text:文字;icon:普通图标;selectedIcon:选中图标。 void
setSelectedIndex(int index) 设置当前选中项。 index:目标标签索引。 void
getSelectedIndex() const 获取当前选中项。 int
setIsHor(bool isHor) 设置横向或纵向。 isHortrue 为横向。 void
setItemSize(int size) 设置项主方向尺寸。 size:尺寸像素。 void
setItemSpace(int space) 设置项间距。 space:间距像素。 void
setShowText(bool show) 是否显示文字。 show:是否显示文字。 void
setShowIcon(bool show) 是否显示图标。 show:是否显示图标。 void
currentChanged(int index) 当前项变化信号。 index:新索引。 void

UIGQMenu 和 UIGQMenuBar

UIGQMenuUIGQMenuBar 适合传统命令组织。

UIGQMenuBar* menuBar = new UIGQMenuBar(parent);
menuBar->setThemeName("MainMenuBar");

UIGQMenu* fileMenu = new UIGQMenu(menuBar);
fileMenu->setTitle("File");
fileMenu->addAction("Open");
menuBar->addMenu(fileMenu);

常用接口:

接口 说明 参数 返回值
addAction(const QString& text) 添加命令项。 text:命令文本。 QAction*
addMenu(QMenu* menu) 添加子菜单或顶层菜单。 menu:菜单对象。 QAction*
addSeparator() 添加分隔线。 QAction*
setTitle(const QString& title) 设置菜单标题。 title:标题文本。 void
exec(const QPoint& pos) 弹出菜单。 pos:全局坐标。 QAction*
triggered(QAction* action) 命令触发信号。 action:触发项。 void
setThemeName(const QString& themeName) 设置菜单主题。 themeName:主题名。 void

UIGQRibbonBar

UIGQRibbonBar 适合命令密度更高的业务软件。Ribbon 内容通常来自配置文件,也可以由代码创建。

UIGQRibbonBar* ribbon = new UIGQRibbonBar(parent);
ribbon->setThemeName("MainRibbon");
ribbon->loadConfigFile("./ribbon.json");

常用接口:

接口 说明 参数 返回值
loadConfigFile(const QString& filePath) 加载 Ribbon 配置。 filePath:配置文件路径。 bool
setThemeName(const QString& themeName) 设置 Ribbon 主题。 themeName:主题名。 void
addPage(const QString& title) 添加 Ribbon 页面。 title:页面标题。 UIGQRibbonPage*
setCurrentIndex(int index) 切换当前页面。 index:页面索引。 void
currentIndex() const 获取当前页面索引。 int
buttonClicked(const QString& name) Ribbon 按钮点击信号。 name:按钮名称。 void

UIGQScrollBar

UIGQScrollBar 可独立使用,也可绑定到 UIGQContainerUIGQScrollViewUIGQTableView 等控件。水平滚动条应使用水平构造或主题,垂直滚动条使用垂直主题。

UIGQScrollBar* hBar = new UIGQScrollBar(Qt::Horizontal, parent);
hBar->setThemeName("qtscrollbarh");
hBar->setWidthHeight(12);

UIGQScrollBar* vBar = new UIGQScrollBar(Qt::Vertical, parent);
vBar->setThemeName("qtscrollbar");
vBar->setWidthHeight(12);

常用接口:

接口 说明 参数 返回值
setOrientation(Qt::Orientation orientation) 设置方向。 orientation:水平或垂直。 void
orientation() const 获取方向。 Qt::Orientation
setRange(int min, int max) 设置滚动范围。 min/max:范围。 void
setValue(int value) 设置当前值。 value:当前滚动值。 void
value() const 获取当前值。 int
setPageStep(int step) 设置页步长。 step:步长。 void
setWidthHeight(int size) 设置滚动条厚度。 size:厚度像素。 void
valueChanged(int value) 滚动值变化信号。 value:新值。 void

使用建议

  • 标签只负责“切换”,页面内容放到 UIGQStackContainer 中。
  • 横向滚动条和垂直滚动条主题分开命名,例如 qtscrollbarhqtscrollbar
  • Ribbon 适合功能多的桌面软件,不适合简单表单页。
  • 菜单命令应和按钮命令复用同一业务槽函数,避免交互入口行为不一致。

图形与画布控件

图形与画布控件

图形类控件用于承载自定义绘制、OpenGL 场景和轻量可视化。Chart 类控件已归入 ChartKit 文档,本章节只说明 WidgetKit 中非图表的图形控件。

控件类型

控件 子内容与能力 典型用途
UIGQCanvas 自定义绘制区域、主题背景、鼠标事件承载 标注层、轻量图形区域、状态绘制
UIGQOpenGLWidget OpenGL 初始化、resize、paint、硬件加速渲染 3D 场景、高频图形刷新
UIGQOGLWidget OpenGL 场景封装、兼容渲染区域 工业视图、模型预览、硬件绘制面板

类继承关系

QWidget
  ├─ UIGQCanvas + IUIGQWidgetBase
  └─ QOpenGLWidget
      ├─ UIGQOpenGLWidget + OpenGLFunctions
      └─ UIGQOGLWidget

UIGQCanvas 属于 WidgetKit 主题控件,支持 IUIGQWidgetBase 的主题和布局能力。UIGQOpenGLWidgetUIGQOGLWidget 更接近渲染承载控件,继承 Qt OpenGL 体系,重点提供硬件绘制区域。

UIGQCanvas

UIGQCanvas 适合绘制辅助图形、状态标记和轻量的自定义视图。业务可以继承或组合使用它,将绘制逻辑集中在图形层。

UIGQCanvas* canvas = new UIGQCanvas(parent);
canvas->setObjectName("annotationCanvas");
canvas->setThemeName("CanvasBg");
canvas->setDrawBackground(true);

常用接口:

接口 说明 参数 返回值
setThemeName(const QString& themeName) 设置画布主题。 themeName:主题名。 void
setDrawBackground(bool draw) 控制是否绘制背景。 draw:是否绘制。 void
update() 请求重新绘制。 void
setMouseTracking(bool enable) 设置鼠标追踪。 enable:是否追踪。 void
paintEvent(QPaintEvent* event) Qt 绘制事件,业务可继承扩展。 event:绘制事件。 void
mousePressEvent(QMouseEvent* event) 鼠标按下事件。 event:鼠标事件。 void
mouseMoveEvent(QMouseEvent* event) 鼠标移动事件。 event:鼠标事件。 void
mouseReleaseEvent(QMouseEvent* event) 鼠标释放事件。 event:鼠标事件。 void

对于交互复杂的画布,建议拆分为数据层、绘制层和操作层,不要在 paintEvent 中直接计算大量业务数据。

UIGQOpenGLWidget 和 UIGQOGLWidget

UIGQOpenGLWidget / UIGQOGLWidget 用于需要硬件渲染的场景,例如 3D 模型、工业设备视图和高频图形刷新区域。

UIGQOGLWidget* view = new UIGQOGLWidget(parent);
view->setObjectName("sceneView");
view->setThemeName("OpenGLPanel");
view->setDrawBackground(false);

常用接口:

接口 说明 参数 返回值
initializeGL() OpenGL 初始化回调。 void
resizeGL(int width, int height) OpenGL 视口尺寸变化回调。 width/height:尺寸。 void
paintGL() OpenGL 绘制回调。 void
update() 请求下一帧绘制。 void
makeCurrent() 使当前 OpenGL 上下文生效。 void
doneCurrent() 释放当前 OpenGL 上下文。 void
setThemeName(const QString& themeName) 设置外层主题。 themeName:主题名。 void
setDrawBackground(bool draw) 控制是否绘制背景。 draw:是否绘制。 void

使用建议

  • Chart 相关控件不要放在 WidgetKit 页面文档中,统一查看 ChartKit 文档。
  • 高频绘制区域避免和复杂 QWidget 层级过度嵌套。
  • 画布背景、边框和圆角仍建议通过 setThemeName(...) 绑定主题。
  • OpenGL 控件的生命周期要和页面切换协调,避免隐藏页面继续高频刷新。

按钮控件

按钮控件

UIGQPushButton 是 WidgetKit 的按钮控件,用于普通操作按钮、主按钮、图标按钮、工具栏按钮和导航按钮。

按钮支持按状态配置背景和文字样式,支持 PNG/SVG 图标,SVG 图标可以保留原始颜色,也可以由控件统一指定颜色。

常见状态

  • 默认状态(Normal)
  • 鼠标悬停状态(Hot)
  • 鼠标按下状态(Pressed)
  • 禁用状态(Disable)

C++ 使用

UIGQPushButton* button = new UIGQPushButton(parent);
button->setObjectName("saveButton");
button->setText("保存");
button->setThemeName("PrimaryButton");
button->setIcon(":/UIGearsWidgetKit/images/save.svg");
button->setFadeEnabled(true);
button->setFadeDuration(160);

按钮 fade 效果默认关闭。可以通过全局配置统一开启,也可以单独设置某个按钮:

UIGQtLib::UIGGlobalConfig config;
config.globalFontFamily = "Microsoft YaHei";
config.buttonFadeEnabled = true;
config.buttonFadeDuration = 160;
UIGQtLib::uigSetGlobalConfig(config);

button->setFadeEnabled(false);

类继承关系

QWidget
  └─ QAbstractButton
      └─ QPushButton
          └─ UIGQPushButton

IUIGQWidgetBase
  └─ UIGQPushButton

UIGQPushButton 同时继承 Qt 的 QPushButton 和 WidgetKit 的 IUIGQWidgetBase。因此它既可以使用 Qt 标准按钮能力,例如 setText(...)clicked 信号、setEnabled(...),也可以使用 WidgetKit 的主题、布局和 JSON 序列化能力。

内部实现上,每个 UIGQPushButton 持有一个 UIGQWidgetBase 基础控制对象和一个 UIGQPushButtonImpl 绘制实现对象:

类型 作用
QPushButton Qt 标准按钮基类,提供点击、文本、启用禁用、事件分发等基础能力。
IUIGQWidgetBase WidgetKit 控件统一接口,提供主题名、布局策略、JSON 读写等能力。
UIGQWidgetBase 控件通用数据对象,保存布局、主题、透明度等基础属性。
UIGQPushButtonImpl 按钮专用实现,负责背景、文字、图标、fade 动画和属性读写。

控件接口说明

构造

接口 说明 参数 返回值
UIGQPushButton(QWidget* parent = nullptr) 创建按钮控件。 parent:父控件,可为空。 控件实例

主题和序列化

接口 说明 参数 返回值
void setThemeName(const QString& themeName) 设置主题名。控件会从当前主题的 theme.json 中读取同名配置。 themeName:主题配置名称。 void
QString getThemeName() const 获取当前主题名。 QString
bool readJsonValue(void* value) 从配置对象读取控件属性。通常由页面加载或设计器调用。 value:指向配置对象。 bool
bool serializeJsonValue(Json::Value* value, bool bRead = true) 读写控件可序列化属性。 value:配置对象;bRead:是否读取。 bool
QString jsonData() const 获取设计器属性字符串。 QString
void setJsonData(const QString& data) 设置设计器属性字符串,并在首次设置时读取配置。 data:属性字符串。 void

背景和状态样式

接口 说明 参数 返回值
void setUseFillStyle(CtrlState state, bool useFillStyle) 指定某个状态是否使用颜色填充样式。state 可传 UIG_STATE_ALL 批量设置。 state:控件状态;useFillStyle:是否使用填充样式。 void
bool getUseFillStyle(CtrlState state) 获取某个状态是否使用颜色填充样式。 state:控件状态。 bool
void setDrawBackground(bool drawBackground) 设置是否绘制按钮背景。图标按钮、透明按钮常设为 false drawBackground:是否绘制背景。 void
bool getDrawBackground() const 获取是否绘制背景。 bool
void setBackground(CtrlState state, const FillStyle& fillStyle) 设置某个状态的背景样式。state 可传 UIG_NORMALUIG_HOTUIG_PRESSEDUIG_DISABLEUIG_STATE_ALL state:控件状态;fillStyle:背景填充样式。 void
const FillStyle& getBackground(CtrlState state) 获取某个状态的背景样式。 state:控件状态。 const FillStyle&
void setTextStyle(CtrlState state, const TextStyleDesc& desc) 设置某个状态的文字样式。 state:控件状态;desc:文字样式描述。 void
const TextStyleDesc& getTextStyle(CtrlState state) 获取某个状态的文字样式。 state:控件状态。 const TextStyleDesc&

Fade 动画

接口 说明 参数 返回值
void setFadeEnabled(bool enabled) 设置当前按钮是否启用 Hot/Normal 状态渐变。 enabled:是否启用渐变。 void
bool getFadeEnabled() const 获取当前按钮是否启用渐变。 bool
void setFadeDuration(int duration) 设置渐变时长,单位毫秒。小于等于 0 时按 150 处理。 duration:渐变时长,单位毫秒。 void
int getFadeDuration() const 获取当前渐变时长。 int

图标

接口 说明 参数 返回值
void setIcon(const QString& iconPath) 设置图标路径。支持 PNG/SVG 和 Qt 资源路径。 iconPath:图标路径或 Qt 资源路径。 void
const QString getIcon() 获取普通图标路径。 QString
void setIcon(const QIcon& icon) 设置 Qt QIcon 图标。 icon:Qt 图标对象。 void
void setHotIcon(const QString& iconPath) 设置 Hot 状态图标路径。 iconPath:Hot 状态图标路径。 void
const QString getHotIcon() 获取 Hot 状态图标路径。 QString
void setPressedIcon(const QString& iconPath) 设置 Pressed 状态图标路径。 iconPath:Pressed 状态图标路径。 void
const QString getPressedIcon() 获取 Pressed 状态图标路径。 QString
void setUseIcon(bool use) 设置是否绘制图标。 use:是否绘制图标。 void
bool getUseIcon() 获取是否绘制图标。 bool
const IconStyleDesc& getIconStyle() 获取图标绘制样式,包括停靠、偏移、SVG 颜色等。 const IconStyleDesc&
void setIconStyle(const IconStyleDesc& style) 设置图标绘制样式。 style:图标绘制样式。 void

文本

接口 说明 参数 返回值
void setShowText(bool show) 设置是否绘制按钮文本。 show:是否绘制文本。 void
bool getShowText() 获取是否绘制按钮文本。 bool
void setTextOffsetX(int offsetX) 设置文本 X 偏移。 offsetX:X 方向偏移量。 void
int getTextOffsetX() 获取文本 X 偏移。 int
void setTextOffsetY(int offsetY) 设置文本 Y 偏移。 offsetY:Y 方向偏移量。 void
int getTextOffsetY() 获取文本 Y 偏移。 int

WidgetKit 通用布局接口

接口 说明 参数 返回值
void setLayoutRatio(int ratio) 设置布局比例值。用于比例布局。 ratio:空间占比权重。 void
int getLayoutRatio() const 获取布局比例值。 int
void setWidthPolicy(LayoutSizePolicy policy) 设置宽度策略。常用值为 UIG_SIZE_AUTOUIG_SIZE_FILLUIG_SIZE_FIXED policy:宽度策略枚举。 void
LayoutSizePolicy getWidthPolicy() const 获取宽度策略。 LayoutSizePolicy
void setHeightPolicy(LayoutSizePolicy policy) 设置高度策略。 policy:高度策略枚举。 void
LayoutSizePolicy getHeightPolicy() const 获取高度策略。 LayoutSizePolicy
void setAbsoluteLayout(bool absoluteLayout) 设置是否使用绝对布局。 absoluteLayout:是否启用绝对布局。 void
bool getAbsoluteLayout() const 获取是否使用绝对布局。 bool
void setAbsoluteDock(DockLayoutType hor, DockLayoutType ver, int offsetX = 0, int offsetY = 0) 设置绝对停靠位置和偏移。 hor:水平停靠;ver:垂直停靠;offsetX/offsetY:偏移量。 void
void getAbsoluteDock(DockLayoutType& hor, DockLayoutType& ver, int& offsetX, int& offsetY) const 获取绝对停靠位置和偏移。 hor/ver/offsetX/offsetY:输出停靠与偏移。 void
void setOpacity(int alpha) 设置控件透明度,范围 0-255 alpha:透明度值。 void
int getOpacity() const 获取控件透明度。 int
void resizeWidget() 根据 WidgetKit 布局数据重新计算控件尺寸和位置。 void

信号

信号 说明 参数 返回值
void enterSignal() 鼠标进入按钮区域时触发。 void
void leaveSignal() 鼠标离开按钮区域时触发。 void
void clicked(bool checked = false) Qt QPushButton 标准点击信号。 checked:按钮选中状态。 void

主题样式建议

按钮背景、文字、图标颜色建议放到主题中维护。业务代码只负责设置文本、图标路径、状态和动作,避免把颜色、圆角、边框写散在页面逻辑里。

使用建议

  • 普通业务按钮优先通过 setThemeName(...) 绑定主题,不建议在页面代码里硬编码颜色。
  • 图标按钮如果不需要背景,使用 drawBackground: falsesetDrawBackground(false)
  • SVG 图标需要统一适配主题色时,设置 iconUseColor: trueiconColor
  • 页面中主按钮数量应保持克制,避免多个强强调按钮同时出现。

输入框控件

输入框控件

UIGQLineEdit 是 WidgetKit 的单行文本输入控件,用于搜索框、表单输入、密码输入、快捷键输入和参数编辑。

输入框控件支持按状态配置背景和文字样式,支持 placeholder 文本样式,支持密码模式和快捷键录入模式。

常见状态

  • 默认状态(Normal)
  • 鼠标悬停状态(Hot)
  • 获得焦点状态(Pressed)
  • 禁用状态(Disable)

C++ 使用

UIGQLineEdit* edit = new UIGQLineEdit(parent);
edit->setObjectName("searchEdit");
edit->setThemeName(UIG_THEME_LINE_EDIT);
edit->setText("");
edit->setPlaceholderText("搜索");
edit->setEditMargin(8, 8, 12, 12);

密码输入:

edit->setIsPassword(true);

快捷键输入:

edit->setHotkeyMode(true);

快捷键模式下,用户按下 CtrlAltShift 与字母组合时,控件会把组合键写入文本;按 DeleteBackspace 会清空文本。

类继承关系

QWidget
  └─ QLineEdit
      └─ UIGQLineEdit

IUIGQWidgetBase
  └─ UIGQLineEdit

UIGQLineEdit 同时继承 Qt 的 QLineEdit 和 WidgetKit 的 IUIGQWidgetBase。因此它既可以使用 Qt 标准输入框能力,例如 setText(...)textChanged 信号、setEchoMode(...),也可以使用 WidgetKit 的主题、布局和 JSON 序列化能力。

内部实现上,每个 UIGQLineEdit 持有一个 UIGQWidgetBase 基础控制对象和一个 UIGQLineEditImpl 绘制实现对象:

类型 作用
QLineEdit Qt 标准单行输入框基类,提供文本输入、光标、选择、焦点和输入事件。
IUIGQWidgetBase WidgetKit 控件统一接口,提供主题名、布局策略、JSON 读写等能力。
UIGQWidgetBase 控件通用数据对象,保存布局、主题、透明度等基础属性。
UIGQLineEditImpl 输入框专用实现,负责背景、文字、placeholder、密码模式、快捷键模式和属性读写。

控件接口说明

构造

接口 说明 参数 返回值
UIGQLineEdit(QWidget* parent = nullptr) 创建单行输入控件。 parent:父控件,可为空。 控件实例

主题和序列化

接口 说明 参数 返回值
void setThemeName(const QString& themeName) 设置主题名。常用值为 UIG_THEME_LINE_EDIT themeName:主题配置名称。 void
QString getThemeName() const 获取当前主题名。 QString
bool readJsonValue(void* value) 从配置对象读取控件属性。通常由页面加载或设计器调用。 value:指向配置对象。 bool
bool serializeJsonValue(Json::Value* value, bool bRead = true) 读写控件可序列化属性。 value:配置对象;bRead:是否读取。 bool
QString jsonData() const 获取设计器属性字符串。 QString
void setJsonData(const QString& data) 设置设计器属性字符串,并在首次设置时读取配置。 data:属性字符串。 void

背景和状态样式

接口 说明 参数 返回值
void setBackground(CtrlState state, const FillStyle& style) 设置某个状态的背景样式。state 可传 UIG_NORMALUIG_HOTUIG_PRESSEDUIG_DISABLE state:控件状态;style:背景填充样式。 void
const FillStyle& getBackground(CtrlState state) 获取某个状态的背景样式。 state:控件状态。 const FillStyle&
void setTextStyle(CtrlState state, const TextStyleDesc& style) 设置某个状态的输入文字样式。设置 UIG_NORMAL 时会立即应用字体和颜色。 state:控件状态;style:文字样式描述。 void
const TextStyleDesc& getTextStyle(CtrlState state) 获取某个状态的输入文字样式。 state:控件状态。 const TextStyleDesc&
void setPlaceholderTextStyle(CtrlState state, const TextStyleDesc& style) 设置 placeholder 文本样式。当前实现使用一份 placeholder 样式,state 参数用于保持接口一致。 state:控件状态;style:placeholder 文字样式。 void
const TextStyleDesc& getPlaceholderTextStyle(CtrlState state) 获取 placeholder 文本样式。 state:控件状态。 const TextStyleDesc&

文本和输入模式

接口 说明 参数 返回值
void setText(const QString& text) Qt 标准接口,设置输入框文本。 text:输入框文本。 void
QString text() const Qt 标准接口,获取输入框文本。 QString
void setPlaceholderText(const QString& text) 设置 placeholder 文本。WidgetKit 自绘 placeholder,不依赖 Qt 原生 placeholder 绘制。 text:placeholder 文本。 void
const QString& getPlaceholderText() 获取 placeholder 文本。 const QString&
void setIsPassword(bool password) 设置密码模式。启用后会禁用右键菜单,并使用 QLineEdit::Password 回显模式。 password:是否启用密码模式。 void
bool getIsPassword() 获取是否为密码模式。 bool
void setHotkeyMode(bool hotkeyMode) 设置快捷键录入模式。 hotkeyMode:是否启用快捷键录入。 void
bool getHotkeyMode() 获取是否为快捷键录入模式。 bool
void setEditMargin(int top, int bottom, int left, int right) 设置输入内容边距。 top/bottom/left/right:内容边距。 void
void getEditMargin(int& top, int& bottom, int& left, int& right) 获取输入内容边距。 top/bottom/left/right:输出内容边距。 void

WidgetKit 通用布局接口

接口 说明 参数 返回值
void setLayoutRatio(int ratio) 设置布局比例值。用于比例布局。 ratio:空间占比权重。 void
int getLayoutRatio() const 获取布局比例值。 int
void setWidthPolicy(LayoutSizePolicy policy) 设置宽度策略。常用值为 UIG_SIZE_AUTOUIG_SIZE_FILLUIG_SIZE_FIXED policy:宽度策略枚举。 void
LayoutSizePolicy getWidthPolicy() const 获取宽度策略。 LayoutSizePolicy
void setHeightPolicy(LayoutSizePolicy policy) 设置高度策略。 policy:高度策略枚举。 void
LayoutSizePolicy getHeightPolicy() const 获取高度策略。 LayoutSizePolicy
void setAbsoluteLayout(bool absoluteLayout) 设置是否使用绝对布局。 absoluteLayout:是否启用绝对布局。 void
bool getAbsoluteLayout() const 获取是否使用绝对布局。 bool
void setAbsoluteDock(DockLayoutType hor, DockLayoutType ver, int offsetX = 0, int offsetY = 0) 设置绝对停靠位置和偏移。 hor:水平停靠;ver:垂直停靠;offsetX/offsetY:偏移量。 void
void getAbsoluteDock(DockLayoutType& hor, DockLayoutType& ver, int& offsetX, int& offsetY) const 获取绝对停靠位置和偏移。 hor/ver/offsetX/offsetY:输出停靠与偏移。 void
void setOpacity(int alpha) 设置控件透明度,范围 0-255 alpha:透明度值。 void
int getOpacity() const 获取控件透明度。 int
void resizeWidget() 根据 WidgetKit 布局数据重新计算控件尺寸和位置。 void

常用信号

信号 说明 参数 返回值
void textChanged(const QString& text) Qt QLineEdit 标准信号,文本变化时触发。 text:变化后的文本。 void
void editingFinished() Qt QLineEdit 标准信号,编辑结束时触发。 void
void returnPressed() Qt QLineEdit 标准信号,按下回车时触发。 void

主题样式建议

输入框背景、边框、文字、placeholder 样式建议放到主题中维护。业务代码只负责设置文本、placeholder、密码模式、快捷键模式和边距。

使用建议

  • 表单输入框优先通过 setThemeName(UIG_THEME_LINE_EDIT) 绑定主题,不建议在页面代码里硬编码颜色。
  • 搜索框可以配合左侧搜索图标容器使用,输入框本身负责输入和 placeholder。
  • 密码模式会禁止复制、粘贴、全选等快捷操作,适合敏感输入。
  • 快捷键模式适合设置页中的热键录入,不适合作为普通文本输入框使用。

复选框控件

复选框控件

复选框控件用于多选、配置项、权限项和开关型参数。

常见状态

  • 未选中(Unchecked)
  • 已选中(Checked)
  • 半选(Indeterminate)
  • 禁用(Disabled)
  • 错误提示(Error)

风格参数

参数 说明
checked 是否选中
tristate 是否支持半选
label 文本说明
size 控件尺寸

类继承关系

QWidget
  └─ QCheckBox
      └─ UIGQCheckBox + IUIGQWidgetBase

UIGQCheckBox 继承 Qt 的 QCheckBox,保留选中、半选、禁用和信号槽能力;同时通过 IUIGQWidgetBase 接入 WidgetKit 主题、图标状态、布局比例和 JSON 序列化。

常用方法

方法 说明 参数 返回值
setChecked(bool checked) 设置复选框是否选中。 checked:是否选中。 void
isChecked() 获取当前是否选中。 bool
setText(const QString& text) 设置复选框文本。 text:显示文本。 void
setThemeName(const QString& themeName) 应用复选框主题配置。 themeName:主题配置名称。 void
setShowIcon(bool show) 设置是否绘制复选框图标。 show:是否绘制图标。 void
setTristate(bool y = true) 设置是否启用三态模式。 y:是否启用三态。 void
checkState() 获取当前勾选状态。 Qt::CheckState

适用建议

批量选择场景建议配合表格表头的半选状态使用。

SVG 图标

UIGQCheckBoxUIGQRadioButton 支持为选中、未选中等状态直接配置 SVG 路径。

SVG 图标

WidgetKit SVG 图标

WidgetKit 已支持在统一的字符串图标渲染路径中直接使用 .svg 路径。下面这些控件可以直接配置 SVG 文件,不需要额外封装为 QIcon

支持的控件

  • UIGQPushButton
  • UIGQRibbonPushButton
  • UIGQCheckBox
  • UIGQRadioButton
  • UIGQComboBox 下拉按钮图标
  • UIGQTabWidget 标签页图标
  • UIGQScrollBar 箭头和滑块图标

支持的路径形式

  • Qt 资源路径::/UIGearsWidgetKit/images/home.svg
  • 皮肤或主题相对路径:images/home.svg
  • 文件系统路径:./icons/home.svg

C++ 示例

UIGQPushButton* button = new UIGQPushButton(parent);
button->setThemeName(UIG_THEME_ICON_WITH_TEXT_BUTTON);
button->setIcon(":/UIGearsWidgetKit/images/home.svg");

UIGQComboBox* combo = new UIGQComboBox(parent);
combo->setThemeName(UIG_THEME_TEXT_COMBOBOX);
combo->setNormalBtnIcon(":/UIGearsWidgetKit/images/chevron-down.svg");
combo->setHotBtnIcon(":/UIGearsWidgetKit/images/chevron-down.svg");

UIGQScrollBar* scrollBar = new UIGQScrollBar(parent);
scrollBar->setOrientation(Qt::Vertical);
scrollBar->setScrollbarBtnIcon(true, ":/UIGearsWidgetKit/images/chevron-up.svg");
scrollBar->setScrollbarBtnIcon(false, ":/UIGearsWidgetKit/images/chevron-down.svg");
scrollBar->setScrollbarThumbIcon(":/UIGearsWidgetKit/images/grip.svg");

主题 JSON 示例

{
  "attr": {
    "btnIcon": ":/UIGearsWidgetKit/images/chevron-down.svg",
    "btnHotIcon": ":/UIGearsWidgetKit/images/chevron-down.svg"
  }
}

使用建议

  • 建议使用稳定的 viewBox 尺寸,例如 16x1618x1820x20
  • 禁用状态不需要单独准备灰色 SVG,库会自动绘制禁用态效果。
  • 文本和图标组合使用的控件,建议在示例程序中检查一次实际间距,确保当前主题下的显示效果合适。

仪表盘控件

仪表盘控件

仪表盘控件用于展示实时数值、设备指标、阈值区间和风险状态。

常见能力

  • 数值和单位显示。
  • 最小值、最大值和当前值。
  • 阈值色带。
  • 警告和危险状态。

风格参数

参数 说明
minValue 最小值
maxValue 最大值
value 当前值
unit 单位
status normal、warning、danger

适用建议

仪表盘适合关键指标展示,不建议在同一页面放置过多大尺寸仪表盘。

授权说明

授权说明

WidgetKit 提供试用版、基础版和完整版。

试用版

用于评估、学习和原型验证,不提供源码,不支持商用。

基础版

包含 WidgetKit 单产品完整源码,支持单项目商用,包含 1 年版本免费升级权益,提供邮件 + 工单支持。

完整版

统一价格为 ¥12,800,包含 StyleKit、WidgetKit、ChartKit、AgentKit 全系列 4 款产品完整源码,不限商用项目数量,包含 1 年版本免费升级权益,提供邮件 + 工单 + 优先支持。

说明

实际授权范围以购买时的订单和协议为准。