产品概览
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 的基础接入流程。
基础流程
- 将 WidgetKit 控件源码或库文件加入项目。
- 配置 include 路径和链接库。
- 在页面中创建控件实例。
- 设置主题、状态和业务数据。
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:皮肤工程目录。theme1、theme2、theme3:主题目录。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 包括:
largeButtonsmallButtonmenuButtoncomboBoxprogressBarcheckBoxradioButtonlabellineEditspinBoxswitchseparator
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());
}
运行目录下保留 theme1、theme2、theme3 后,就可以在运行时切换风格。新增主题时,建议复制一套已有主题目录,再调整 theme.json、style.json 和图片资源。
接入建议
- 先运行
UIGearsWidgetKitdemo,确认皮肤、主题和 Ribbon 配置能正常加载。 - 页面内优先使用
UIGQContainer、UIGQPushButton、UIGQComboBox、UIGQCheckBox、UIGQRadioButton、UIGQTableView等内部控件。 - 对
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 初始化代码和资源加载流程。
- 使用
UIGQContainer、UIGQPushButton、UIGQLineEdit等控件组装页面。 - 编写或检查
theme.json、style.json。 - 将可复用视觉样式迁移到主题配置。
- 排查 SVG 图标、按钮 hover、fade、滚动条方向、布局比例和绝对停靠问题。
- 生成控件 JSON 属性说明和序列化实现建议。
接入步骤
- 下载并解压
qt-ui-uigears-widgetkit-skill.zip。 - 将
uigears-widgetkit放到 AI 工具可读取的 skills 目录。 - 需求中明确要求 AI 使用 WidgetKit,例如“使用 UIGears WidgetKit 控件实现这个设置页”。
- 新项目接入时先让 AI 读取
references/integration.md。 - 修改控件 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.json和style.json。 setDrawBackground(false)这类绘制行为可以保留在 C++。- 主题切换不应意外改变布局尺寸,除非主题项明确配置了几何字段。
布局与容器控件
布局与容器控件
布局控件负责组织页面结构、尺寸策略、滚动区域和多页面切换。建议先用 UIGQContainer 搭出页面骨架,再根据内容复杂度引入 UIGQScrollView、UIGQStackContainer、UIGQSplitter 等控件。
控件类型
| 控件 | 子内容与能力 | 典型用途 |
|---|---|---|
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
UIGQCheckBox 和 UIGQRadioButton 都支持选中、未选中、禁用和悬停图标,也支持按状态设置文本样式。
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 负责外观和交互一致性。
- 表格中需要操作按钮时,优先使用自定义列控件,避免把所有操作塞进文本。
- 横向内容较宽时显式配置水平滚动条主题,避免宽列被挤压。
- 属性面板适合低频配置,不建议承载大量实时数据。
图形与画布控件
图形与画布控件
图形类控件用于承载自定义绘制、OpenGL 场景和轻量可视化。Chart 类控件已归入 ChartKit 文档,本章节只说明 WidgetKit 中非图表的图形控件。
控件类型
| 控件 | 子内容与能力 | 典型用途 |
|---|---|---|
UIGQCanvas |
自定义绘制区域、主题背景、鼠标事件承载 | 标注层、轻量图形区域、状态绘制 |
UIGQOpenGLWidget |
OpenGL 初始化、resize、paint、硬件加速渲染 | 3D 场景、高频图形刷新 |
UIGQOGLWidget |
OpenGL 场景封装、兼容渲染区域 | 工业视图、模型预览、硬件绘制面板 |
类继承关系
QWidget
├─ UIGQCanvas + IUIGQWidgetBase
└─ QOpenGLWidget
├─ UIGQOpenGLWidget + OpenGLFunctions
└─ UIGQOGLWidget
UIGQCanvas 属于 WidgetKit 主题控件,支持 IUIGQWidgetBase 的主题和布局能力。UIGQOpenGLWidget 与 UIGQOGLWidget 更接近渲染承载控件,继承 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_NORMAL、UIG_HOT、UIG_PRESSED、UIG_DISABLE 或 UIG_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_AUTO、UIG_SIZE_FILL、UIG_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: false或setDrawBackground(false)。 - SVG 图标需要统一适配主题色时,设置
iconUseColor: true和iconColor。 - 页面中主按钮数量应保持克制,避免多个强强调按钮同时出现。
输入框控件
输入框控件
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);
快捷键模式下,用户按下 Ctrl、Alt、Shift 与字母组合时,控件会把组合键写入文本;按 Delete 或 Backspace 会清空文本。
类继承关系
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_NORMAL、UIG_HOT、UIG_PRESSED、UIG_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_AUTO、UIG_SIZE_FILL、UIG_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 图标
UIGQCheckBox 和 UIGQRadioButton 支持为选中、未选中等状态直接配置 SVG 路径。
SVG 图标
WidgetKit SVG 图标
WidgetKit 已支持在统一的字符串图标渲染路径中直接使用 .svg 路径。下面这些控件可以直接配置 SVG 文件,不需要额外封装为 QIcon。
支持的控件
UIGQPushButtonUIGQRibbonPushButtonUIGQCheckBoxUIGQRadioButtonUIGQComboBox下拉按钮图标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尺寸,例如16x16、18x18或20x20。 - 禁用状态不需要单独准备灰色 SVG,库会自动绘制禁用态效果。
- 文本和图标组合使用的控件,建议在示例程序中检查一次实际间距,确保当前主题下的显示效果合适。
仪表盘控件
仪表盘控件
仪表盘控件用于展示实时数值、设备指标、阈值区间和风险状态。
常见能力
- 数值和单位显示。
- 最小值、最大值和当前值。
- 阈值色带。
- 警告和危险状态。
风格参数
| 参数 | 说明 |
|---|---|
minValue |
最小值 |
maxValue |
最大值 |
value |
当前值 |
unit |
单位 |
status |
normal、warning、danger |
适用建议
仪表盘适合关键指标展示,不建议在同一页面放置过多大尺寸仪表盘。
授权说明
授权说明
WidgetKit 提供试用版、基础版和完整版。
试用版
用于评估、学习和原型验证,不提供源码,不支持商用。
基础版
包含 WidgetKit 单产品完整源码,支持单项目商用,包含 1 年版本免费升级权益,提供邮件 + 工单支持。
完整版
统一价格为 ¥12,800,包含 StyleKit、WidgetKit、ChartKit、AgentKit 全系列 4 款产品完整源码,不限商用项目数量,包含 1 年版本免费升级权益,提供邮件 + 工单 + 优先支持。
说明
实际授权范围以购买时的订单和协议为准。