跳转到内容

NColors 预定义颜色集合 ​

介绍 ​

NColors 提供了一套完整的预定义颜色集合,遵循 Fluent Design 设计系统。包括基础颜色、强调色和状态颜色,每种颜色都包含多个色调变体,用于创建一致的、现代化的 UI。

基础颜色 ​

cpp
#include <QtNativeUI/NColor.h>

// 基础颜色
QColor transparent = NColors::transparent;  // 透明色
QColor black = NColors::black;              // 黑色
QColor white = NColors::white;              // 白色

灰色色调 ​

灰色提供了 11 个色调,从最深(220)到最浅(10):

cpp
// 获取灰色的特定色调
QColor grey160 = NColors::grey[160];  // 主色调
QColor grey220 = NColors::grey[220];  // 最深
QColor grey10 = NColors::grey[10];    // 最浅

// 灰色主色调
QColor greyPrimary = NColors::grey.primary();

灰色色调索引:

  • 220, 210, 200, 190, 180, 170, 160(主色调), 150, 140, 130, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10

强调色 ​

提供 8 种预定义的强调色,每种都包含 7 个色调变体:

cpp
// 访问强调色
NAccentColor yellow = NColors::yellow;
NAccentColor orange = NColors::orange;
NAccentColor red = NColors::red;
NAccentColor magenta = NColors::magenta;
NAccentColor purple = NColors::purple;
NAccentColor blue = NColors::blue;
NAccentColor teal = NColors::teal;
NAccentColor green = NColors::green;

强调色的色调变体 ​

每个强调色都包含 7 个预定义的色调:

cpp
// 获取蓝色的不同色调
QColor blueDarkest = NColors::blue.darkest();   // 最深
QColor blueDarker = NColors::blue.darker();     // 较深
QColor blueDark = NColors::blue.dark();         // 深
QColor blueNormal = NColors::blue.normal();     // 标准
QColor blueLight = NColors::blue.light();       // 浅
QColor blueLighter = NColors::blue.lighter();   // 较浅
QColor blueLightest = NColors::blue.lightest(); // 最浅

根据主题获取强调色 ​

强调色可以根据亮度模式自动返回合适的变体:

cpp
// 根据主题模式获取强调色
bool isDarkMode = true;

// 获取默认笔刷颜色(根据主题自动选择)
QColor defaultColor = NColors::blue.defaultBrushFor(isDarkMode);

// 获取次要笔刷颜色(带透明度)
QColor secondaryColor = NColors::blue.secondaryBrushFor(isDarkMode);

// 获取三级笔刷颜色(更高透明度)
QColor tertiaryColor = NColors::blue.tertiaryBrushFor(isDarkMode);

按名称访问色调 ​

cpp
// 通过名称访问特定色调
QColor darkShade = NColors::red["dark"];
QColor normalShade = NColors::red["normal"];
QColor lightShade = NColors::red["light"];

状态颜色 ​

用于表示不同的操作状态:

cpp
// 警告状态
QColor warningPrimary = NColors::warningPrimaryColor;
NAccentColor warningSecondary = NColors::warningSecondaryColor;

// 错误状态
QColor errorPrimary = NColors::errorPrimaryColor;
NAccentColor errorSecondary = NColors::errorSecondaryColor;

// 成功状态
QColor successPrimary = NColors::successPrimaryColor;
NAccentColor successSecondary = NColors::successSecondaryColor;

按枚举获取强调色 ​

cpp
// 使用枚举获取强调色
NAccentColor yellowColor = NColors::getAccentColor(NAccentColorType::Yellow);
NAccentColor orangeColor = NColors::getAccentColor(NAccentColorType::Orange);
NAccentColor redColor = NColors::getAccentColor(NAccentColorType::Red);
NAccentColor magentaColor = NColors::getAccentColor(NAccentColorType::Magenta);
NAccentColor purpleColor = NColors::getAccentColor(NAccentColorType::Purple);
NAccentColor blueColor = NColors::getAccentColor(NAccentColorType::Blue);
NAccentColor tealColor = NColors::getAccentColor(NAccentColorType::Teal);
NAccentColor greenColor = NColors::getAccentColor(NAccentColorType::Green);

所有强调色列表 ​

cpp
// 获取所有强调色
QList<NAccentColor> allAccentColors = NColors::accentColors;

// 遍历所有强调色
for (const NAccentColor& color : allAccentColors) {
    QColor normal = color.normal();
    // 使用颜色...
}

按钮样式示例 ​

cpp
// 创建按钮并应用强调色
NPushButton* button = new NPushButton("确定");

// 使用蓝色强调色
NAccentColor accentColor = NColors::blue;
button->setAccentColor(accentColor);

// 或使用特定的色调
button->setAccentColor(accentColor.normal());

状态指示器示例 ​

cpp
// 创建状态指示器
QLabel* statusLabel = new QLabel("处理中");

// 根据状态选择颜色
QColor statusColor;
if (isSuccess) {
    statusColor = NColors::successPrimaryColor;
} else if (isError) {
    statusColor = NColors::errorPrimaryColor;
} else if (isWarning) {
    statusColor = NColors::warningPrimaryColor;
}

statusLabel->setStyleSheet(QString("color: %1;").arg(statusColor.name()));

主题适配示例 ​

cpp
// 创建控件并根据主题选择颜色
QWidget* card = new QWidget();

// 获取当前主题
bool isDarkMode = nTheme->isDarkMode();

// 使用强调色的主题感知变体
QColor cardAccent = NColors::blue.defaultBrushFor(isDarkMode);

// 设置样式
card->setStyleSheet(QString("background-color: %1;").arg(cardAccent.name()));

颜色对比示例 ​

cpp
// 为不同的背景选择合适的强调色
QColor backgroundColor = NColors::grey[220];

// 在浅色背景上使用深色强调色
QColor accentForLight = NColors::blue.dark();

// 在深色背景上使用浅色强调色
QColor accentForDark = NColors::blue.light();

渐变色示例 ​

cpp
// 创建使用强调色的渐变
QLinearGradient gradient(0, 0, 100, 100);
gradient.setColorAt(0, NColors::blue.darkest());
gradient.setColorAt(0.5, NColors::blue.normal());
gradient.setColorAt(1, NColors::blue.lightest());

QPainter painter;
painter.fillRect(rect, gradient);

API 参考 ​

NColors 静态成员 ​

基础颜色 ​

成员类型说明
transparentQColor透明色 (0, 0, 0, 0)
blackQColor黑色 (0, 0, 0)
whiteQColor白色 (255, 255, 255)

灰色 ​

成员类型说明
greyNShadedColor灰色色调集合,包含 11 个色调

强调色 ​

成员类型说明
yellowNAccentColor黄色强调色
orangeNAccentColor橙色强调色
redNAccentColor红色强调色
magentaNAccentColor品红色强调色
purpleNAccentColor紫色强调色
blueNAccentColor蓝色强调色
tealNAccentColor青色强调色
greenNAccentColor绿色强调色

状态颜色 ​

成员类型说明
warningPrimaryColorQColor警告主色
warningSecondaryColorNAccentColor警告辅助色
errorPrimaryColorQColor错误主色
errorSecondaryColorNAccentColor错误辅助色
successPrimaryColorQColor成功主色
successSecondaryColorNAccentColor成功辅助色

列表 ​

成员类型说明
accentColorsQList<NAccentColor>所有强调色的列表

NColors 静态方法 ​

方法说明参数返回值
getAccentColor(NAccentColorType::Type type)根据枚举获取强调色强调色类型NAccentColor

NAccentColor 方法 ​

色调访问 ​

方法说明返回值
darkest()获取最深色调QColor
darker()获取较深色调QColor
dark()获取深色调QColor
normal()获取标准色调QColor
light()获取浅色调QColor
lighter()获取较浅色调QColor
lightest()获取最浅色调QColor

主题感知方法 ​

方法说明参数返回值
defaultBrushFor(bool isDark)获取默认笔刷颜色是否暗黑主题QColor
secondaryBrushFor(bool isDark)获取次要笔刷颜色是否暗黑主题QColor
tertiaryBrushFor(bool isDark)获取三级笔刷颜色是否暗黑主题QColor

访问操作符 ​

操作符说明参数返回值
operator[](const QString& name)按名称访问色调色调名称QColor

比较操作符 ​

操作符说明参数返回值
operator==(const NAccentColor& other)相等比较另一个强调色bool
operator!=(const NAccentColor& other)不相等比较另一个强调色bool

NShadedColor 方法 ​

方法说明参数返回值
operator[](int shade)按索引访问色调色调索引QColor
primary()获取主色调-QColor

NAccentColorType 枚举 ​

值说明
Yellow黄色
Orange橙色
Red红色
Magenta品红色
Purple紫色
Blue蓝色
Teal青色
Green绿色
Custom自定义

色调名称参考 ​

使用 operator[] 访问色调时,支持以下名称:

名称说明
"darkest"最深色调
"darker"较深色调
"dark"深色调
"normal"标准色调
"light"浅色调
"lighter"较浅色调
"lightest"最浅色调

灰色色调索引参考 ​

灰色支持以下色调索引(从深到浅):

220, 210, 200, 190, 180, 170, 160(主色调), 150, 140, 130, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10

最佳实践 ​

1. 使用强调色的色调变体 ​

cpp
// 好的做法:使用预定义的色调
QColor buttonColor = NColors::blue.normal();
QColor hoverColor = NColors::blue.light();
QColor pressColor = NColors::blue.dark();

// 避免:手动调整颜色
// QColor buttonColor = NColors::blue.normal().lighter(120);

2. 根据主题选择颜色 ​

cpp
// 好的做法:使用主题感知方法
QColor accentColor = NColors::blue.defaultBrushFor(isDarkMode);

// 避免:硬编码颜色
// QColor accentColor = isDarkMode ? NColors::blue.lighter() : NColors::blue.darker();

3. 使用状态颜色表示状态 ​

cpp
// 好的做法:使用预定义的状态颜色
if (isError) {
    label->setStyleSheet(QString("color: %1;").arg(NColors::errorPrimaryColor.name()));
} else if (isSuccess) {
    label->setStyleSheet(QString("color: %1;").arg(NColors::successPrimaryColor.name()));
}

4. 灰色用于背景和边框 ​

cpp
// 好的做法:使用灰色色调
QColor backgroundColor = NColors::grey[50];
QColor borderColor = NColors::grey[150];

// 避免:使用强调色作为背景
// QColor backgroundColor = NColors::blue[50];

基于 LGPL-3.0 许可发布