跳转到内容

NEnums 枚举定义

介绍

NEnums 定义了 QtNativeUI 中使用的各种枚举类型,包括主题模式、设计令牌、导航类型等。这些枚举提供了类型安全的方式来指定各种配置和状态。

主题模式

cpp
#include <QtNativeUI/NEnums.h>

// 主题模式枚举
enum NThemeType::ThemeMode {
    Light,   // 明亮主题
    Dark,    // 暗黑主题
    System   // 跟随系统主题
};

// 使用示例
nTheme->setThemeMode(NThemeType::ThemeMode::Light);
nTheme->setThemeMode(NThemeType::ThemeMode::Dark);
nTheme->setThemeMode(NThemeType::ThemeMode::System);

设计令牌

设计令牌定义了 UI 设计中的各种参数,确保整个应用的视觉一致性。

圆角

cpp
enum NDesignTokenKey::Radius {
    CornerRadiusNone,      // 无圆角
    CornerRadiusSmall,     // 小圆角
    CornerRadiusDefault,   // 默认圆角
    CornerRadiusMedium,    // 中等圆角
    CornerRadiusLarge,     // 大圆角
    CornerRadiusCircular   // 圆形
};

// 使用示例
int radius = nTheme->getRadius(NDesignTokenKey::CornerRadiusDefault).toInt();

间距

cpp
enum NDesignTokenKey::Spacing {
    SpacingNone,   // 无间距
    SpacingXS,     // 超小间距
    SpacingS,      // 小间距
    SpacingM,      // 中等间距
    SpacingL,      // 大间距
    SpacingXL,     // 超大间距
    SpacingXXL,    // 特大间距
    SpacingXXXL    // 极大间距
};

// 使用示例
int spacing = nTheme->getSpacing(NDesignTokenKey::SpacingM).toInt();

字体大小

cpp
enum NDesignTokenKey::FontSize {
    FontSizeCaption,      // 说明文本 (12px)
    FontSizeBody,         // 正文文本 (14px)
    FontSizeBodyLarge,    // 大号正文 (16px)
    FontSizeSubTitle,     // 副标题 (20px)
    FontSizeTitle,        // 标题 (28px)
    FontSizeTitleLarge,   // 大号标题 (40px)
    FontSizeDisplay       // 展示型标题 (68px)
};

// 使用示例
int fontSize = nTheme->getFontSize(NDesignTokenKey::FontSizeBody).toInt();

字重

cpp
enum NDesignTokenKey::FontWeight {
    FontWeightRegular,    // 常规 (400)
    FontWeightMedium,     // 中等 (500)
    FontWeightSemibold,   // 半粗体 (600)
    FontWeightBold        // 粗体 (700)
};

// 使用示例
int fontWeight = nTheme->getFontWeight(NDesignTokenKey::FontWeightMedium).toInt();

阴影层级

cpp
enum NDesignTokenKey::Elevation {
    ElevationNone,     // 无阴影
    ElevationRest,     // 静止状态阴影
    ElevationHover,    // 悬停状态阴影
    ElevationFlyout,   // 浮出菜单阴影
    ElevationDialog    // 对话框阴影
};

// 使用示例
QVariantMap elevation = nTheme->getElevation(NDesignTokenKey::ElevationRest).toMap();

动画时长

cpp
enum NDesignTokenKey::AnimationDuration {
    AnimationFast,      // 快速 (150ms)
    AnimationNormal,    // 正常 (300ms)
    AnimationSlow,      // 缓慢 (500ms)
    AnimationVerySlow   // 非常缓慢 (1000ms)
};

// 使用示例
int duration = nTheme->getAnimationDuration(NDesignTokenKey::AnimationNormal).toInt();

动画缓动

cpp
enum NDesignTokenKey::AnimationEasing {
    EasingStandard,     // 标准缓动
    EasingAccelerate,   // 加速缓动
    EasingDecelerate,   // 减速缓动
    EasingLinear        // 线性缓动
};

// 使用示例
QString easing = nTheme->getAnimationEasing(NDesignTokenKey::EasingStandard).toString();

信息栏类型

cpp
enum NInfoBarType::PositionPolicy {
    Top,         // 顶部居中
    TopLeft,     // 左上角
    TopRight,    // 右上角
    Bottom,      // 底部居中
    BottomLeft,  // 左下角
    BottomRight, // 右下角
    Left,        // 左侧居中
    Right        // 右侧居中
};

enum NInfoBarType::InfoMode {
    Information, // 信息
    Success,     // 成功
    Warning,     // 警告
    Error        // 错误
};

// 使用示例
NInfoBar* infoBar = new NInfoBar();
infoBar->setMode(NInfoBarType::InfoMode::Success);
infoBar->setPosition(NInfoBarType::PositionPolicy::TopRight);

标签类型

cpp
enum NLabelType::Type {
    Caption,         // 说明文本 (12px 常规)
    Body,            // 正文文本 (14px 常规)
    BodyStrong,      // 强调正文 (14px 半粗体)
    BodyLarge,       // 大号正文 (16px 常规)
    BodyStrongLarge, // 大号正文 (16px 半粗体)
    Subtitle,        // 副标题 (20px 半粗体)
    Title,           // 标题 (28px 半粗体)
    TitleLarge,      // 大号标题 (40px 半粗体)
    Display,         // 展示型标题 (68px 半粗体)
    Default          // 默认样式
};

// 使用示例
NLabel* label = new NLabel("标题文本");
label->setType(NLabelType::Type::Title);

导航类型

导航显示模式

cpp
enum NNavigationType::NavigationDisplayMode {
    Auto,    // 自动模式,根据窗口大小自动调整
    Minimal, // 最小化模式,导航栏隐藏
    Compact, // 紧凑模式,只显示图标
    Maximal  // 最大化模式,显示完整导航栏
};

// 使用示例
navigationView->setDisplayMode(NNavigationType::NavigationDisplayMode::Auto);

导航节点类型

cpp
enum NNavigationType::NavigationNodeType {
    PageNode,  // 页面节点
    FooterNode // 页脚节点
};

页面过渡类型

cpp
enum NNavigationType::PageTransitionType {
    NoTransition,     // 无过渡效果
    PopupTransition,  // 弹出过渡
    ScaleTransition,  // 缩放过渡
    FlipTransition,   // 翻转过渡
    BlurTransition,   // 模糊过渡
    CubeTransition,   // 立方体翻转
    RippleTransition  // 波纹扩散
};

// 使用示例
stackedWidget->doPageSwitch(
    NNavigationType::PageTransitionType::SlideLeft,
    targetIndex,
    false,
    300
);

导航操作返回类型

cpp
enum NNavigationType::NodeOperateReturnType {
    Success,              // 操作成功
    PageInvalid,          // 页面无效
    TargetNodeInvalid,    // 目标节点无效
    TargetNodeTypeError,  // 目标节点类型错误
    TargetNodeDepthLimit, // 目标节点深度超限
    FooterUpperLimit      // 页脚上限
};

导航路由类型

cpp
enum NNavigationRouterType::NavigationRouteType {
    Success,             // 操作成功
    ObjectInvalid,       // 对象无效
    FunctionNameInvalid, // 函数名无效
    PageNotFound,        // 页面未找到
    RouteRejected,       // 路由被拒绝
    NoHistory            // 无历史记录
};

最佳实践

1. 使用设计令牌保持一致性

cpp
// 推荐:使用设计令牌
int radius = nTheme->getRadius(NDesignTokenKey::CornerRadiusDefault).toInt();
int spacing = nTheme->getSpacing(NDesignTokenKey::SpacingM).toInt();

// 避免:硬编码数值
// int radius = 8;
// int spacing = 16;

2. 使用枚举而不是魔法数字

cpp
// 推荐:使用枚举
nTheme->setThemeMode(NThemeType::ThemeMode::System);

// 避免:使用数字
// nTheme->setThemeMode(2);

3. 根据设计令牌调整 UI

cpp
// 推荐:根据令牌调整
int fontSize = nTheme->getFontSize(NDesignTokenKey::FontSizeBody).toInt();
label->setFont(QFont("Segoe UI", fontSize));

// 避免:硬编码字体大小
// label->setFont(QFont("Segoe UI", 14));

完整参考表

枚举类型说明
NThemeType::ThemeModeLight, Dark, System主题模式
NDesignTokenKey::Radius6 个值圆角大小
NDesignTokenKey::Spacing8 个值间距大小
NDesignTokenKey::FontSize7 个值字体大小
NDesignTokenKey::FontWeight4 个值字重
NDesignTokenKey::Elevation5 个值阴影层级
NDesignTokenKey::AnimationDuration4 个值动画时长
NDesignTokenKey::AnimationEasing4 个值动画缓动
NInfoBarType::PositionPolicy8 个值信息栏位置
NInfoBarType::InfoMode4 个值信息栏模式
NLabelType::Type10 个值标签类型
NNavigationType::NavigationDisplayMode4 个值导航显示模式
NNavigationType::PageTransitionType7 个值页面过渡类型

基于 LGPL-3.0 许可发布