admin 管理员组

文章数量: 1184232

目录

一. 窗口和屏幕管理

二. 绘图和渲染

三. 图像处理

四. 字体和文本

五. 事件和输入处理

六. OpenGL 和硬件加速

七. 颜色和外观

1、基础说明

1.1、QColor 的角色

1.2、QPalette 的角色

1.3、QColor 和 QPalette 的分工与协作

2、QColor: 颜色表示

2.1、QColor 简介

2.2、颜色模型

2.2.1、RGB (Red, Green, Blue)

2.2.2、HSV (Hue, Saturation, Value)

2.2.3、CMYK (Cyan, Magenta, Yellow, Key/Black)

2.2.4、HSL (Hue, Saturation, Lightness)

2.3、其他颜色表示与创建方式

2.4、颜色操作与转换

2.5、QColor 应用

3、QPalette: 颜色方案管理

3.1、QPalette 简介

3.2、颜色组 (QPalette::ColorGroup)

3.3、颜色角色 (QPalette::ColorRole)

3.4、QPalette 的创建与设置

3.5、QPalette 的查询

3.6、QPalette 与 Qt 样式表 (Style Sheets) 的关系

4、示例代码

4.1、使用 QColor 设置按钮背景颜色

4.2、使用 QPalette 设置窗口背景和文本颜色

4.3、使用 QPalette 动态切换按钮颜色

4.4、使用 QColor 和 QPalette 设置复杂控件样式

八. 图标和光标

九. 平台和渲染后端

十. 国际化(GUI 相关)


一. 窗口和屏幕管理

请跳转章节,此处不再重复:QtGUI模块功能详细说明,窗口和屏幕管理(一)

二. 绘图和渲染

 请跳转章节,此处不再重复:QtGUI模块功能详细说明,图形绘制与渲染(二)

三. 图像处理

 请跳转章节,此处不再重复:QtGUI模块功能详细说明,图像处理(三)

四. 字体和文本

 请跳转章节,此处不再重复:QtGUI模块功能详细说明, 字体和文本渲染(四)

五. 事件和输入处理

 请跳转章节,此处不再重复:QtGUI模块功能详细说明,事件与输入处理(五)

六. OpenGL 和硬件加速

支持 OpenGL 和 Vulkan 渲染,适用于高性能图形,暂不说明。

七. 颜色和外观

在 Qt 应用程序的开发中,颜色与外观是用户界面 (UI) 设计的核心组成部分,直接影响用户体验、视觉吸引力和功能清晰度。

1、基础说明

在 Qt 中,QColor 和 QPalette 是颜色管理的两大核心类,它们在功能和使用场景上各有侧重,协同工作以实现灵活的颜色控制。

1.1、QColor 的角色

QColor 是一个基础类,用于表示和操作单个颜色。它提供了对颜色值的精确控制,适用于需要直接指定颜色的场景。

  • 支持多种颜色表示方式,包括 RGB、HSV、CMYK 和十六进制(如 #FF0000)。

  • 提供颜色操作方法,如调整亮度、饱和度、透明度(Alpha 通道)等。

  • 支持颜色名称(如 "red"、"blue")和跨平台颜色一致性。

  • 可以查询颜色的属性(如 red()、green()、blue() 或 hue()、saturation())。

使用场景:

  • 直接设置控件颜色:例如,通过 QWidget::setStyleSheet() 或 QPainter 设置背景色、前景色等。

    QWidget widget;
    widget.setStyleSheet("background-color: #FF5733;");
  • 动态生成颜色:在需要根据条件计算颜色时使用,例如渐变色或基于用户输入的颜色。

    QColor color(255, 87, 51); // RGB 红色
    color.setHsv(30, 200, 255); // 转换为 HSV 模型
  • 绘制图形:在 QPainter 中用于绘制形状、线条或填充区域。

    QPainter painter(this);
    painter.setPen(QColor(0, 128, 255));
    painter.drawLine(0, 0, 100, 100);

1.2、QPalette 的角色

QPalette 是一个更高级的类,用于管理控件或应用程序的颜色集合(调色板),它定义了不同控件状态和角色的颜色(如前景、背景、选中状态等)。

  • 提供一组颜色角色(ColorRole),如 Window(窗口背景)、Text(文本颜色)、Button(按钮背景)等。

  • 支持三种状态(ColorGroup):Active(活动)、Inactive(非活动)、Disabled(禁用)。

  • 允许为不同角色和状态设置独立的 QColor 值,形成完整的颜色方案。

  • 支持动态切换调色板,例如实现明暗主题或响应系统主题变化。

使用场景:

  • 全局外观管理:通过设置应用程序的调色板,确保所有控件遵循统一的颜色方案。

    QPalette palette = qApp->palette();
    palette.setColor(QPalette::Window, QColor(53, 53, 53)); // 深色背景
    palette.setColor(QPalette::Text, Qt::white); // 白色文本
    qApp->setPalette(palette);
  • 控件特定调色板:为单个控件自定义颜色,而不影响全局。

    QWidget widget;
    QPalette palette = widget.palette();
    palette.setColor(QPalette::Button, QColor(100, 149, 237));
    widget.setPalette(palette);
  • 主题切换:通过替换 QPalette 实现明暗主题或自定义主题。

    QPalette darkPalette;
    darkPalette.setColor(QPalette::Window, QColor(30, 30, 30));
    darkPalette.setColor(QPalette::WindowText, Qt::white);
    qApp->setPalette(darkPalette); // 切换到暗主题
  • 状态反馈:为不同状态(如禁用按钮)设置不同颜色,提升交互清晰度。

    palette.setColor(QPalette::Disabled, QPalette::ButtonText, Qt::gray);

1.3、QColor 和 QPalette 的分工与协作

QColor 是底层的颜色表示工具,专注于单个颜色的定义和操作,适合直接绘制或局部颜色设置。

QPalette 是高层的颜色管理工具,负责组织和应用一组颜色到控件或应用程序,适合全局或状态相关的颜色管理。

协作:

  • QPalette 使用 QColor 来定义每个角色和状态的具体颜色。

    QPalette palette;
    palette.setColor(QPalette::Window, QColor(200, 200, 200));
  • 开发者可以先用 QColor 计算或生成颜色,再将其应用到 QPalette 中。例如,动态生成渐变色后更新调色板。

  • 在复杂场景中,QPalette 提供全局一致性,而 QColor 提供细粒度的颜色调整。例如,通过 QPalette 设置按钮的默认颜色,再用 QColor 通过样式表微调特定按钮的外观。

实际开发中的选择:

  • 如果只需要设置单一控件的颜色(如背景或文本),直接使用 QColor 和样式表更简单。

  • 如果需要管理整个应用程序的颜色方案或支持主题切换,使用 QPalette 更高效。

  • 混合使用两者可以实现灵活的颜色管理,例如用 QPalette 设置默认主题,再用 QColor 动态调整特定控件。

2、QColor: 颜色表示

2.1、QColor 简介

QColor 是 Qt 框架中用于表示和操作颜色的核心类,广泛应用于图形绘制、界面样式设置和颜色管理。它支持多种颜色模型(如 RGB、HSV、CMYK、HSL),并提供丰富的功能来创建、查询、修改和转换颜色。

基本构造与修改

QColor color; // 默认构造,无效颜色 (isValid() 返回 false)
QColor red(255, 0, 0); // RGB 构造函数
QColor blue(Qt::blue); // 使用 Qt::GlobalColor 枚举
QColor green("#00FF00"); // 十六进制字符串
QColor cyan("cyan"); // 颜色名称

QColor original(255, 0, 0);
QColor modified = original; // 复制
modified.setRgb(0, 255, 0); // 修改副本,原对象不变

2.2、颜色模型

QColor 支持多种颜色模型,每种模型适合不同的使用场景。

2.2.1、RGB (Red, Green, Blue)

原理与加法混色:

  • RGB 是一种加法混色模型,基于红 (Red)、绿 (Green)、蓝 (Blue) 三原色的组合,广泛用于显示器和数字设备。

  • 每种分量的值范围为 0 到 255(整数)或 0.0 到 1.0(浮点),通过叠加形成不同颜色。

  • 例如:(255, 0, 0) 为纯红,(255, 255, 255) 为白色,(0, 0, 0) 为黑色。

通过整数/浮点分量创建、查询与设置:

  • 创建:

    QColor color(255, 128, 0); // 整数 RGB (橙色)
    color.setRgbF(1.0, 0.5, 0.0); // 浮点 RGB
  • 查询:

    int r = color.red(); // 返回 255
    float rf = color.redF(); // 返回 1.0
  • 设置:

    color.setRgb(0, 255, 0); // 设置为绿色
    color.setRed(128); // 单独修改红色分量
  • 透明度 (Alpha) 通道:

    • Alpha 通道表示颜色的透明度,范围为 0(完全透明)到 255(完全不透明)。

    • 创建带 Alpha 的颜色:

      QColor semiTransparent(255, 0, 0, 128); // 半透明红色
      color.setAlpha(64); // 设置 Alpha 为 1/4 透明
    • 查询 Alpha:

      int alpha = color.alpha(); // 返回 128
      float alphaF = color.alphaF(); // 返回 0.5
2.2.2、HSV (Hue, Saturation, Value)

原理与人类感知:

  • HSV 模型基于人类对颜色的感知,分为色相 (Hue)、饱和度 (Saturation) 和明度 (Value)

  • 色相 (Hue):表示颜色类型(如红、蓝),范围为 0 到 359 度。

  • 饱和度 (Saturation):表示颜色的纯度,0(灰色)到 255(纯色)。

  • 明度 (Value):表示亮度,0(黑色)到 255(最亮)。

  • HSV 适合需要调整颜色亮度或饱和度的场景,如主题生成或颜色选择器。

通过色相、饱和度、明度创建、查询与设置:

  • 创建:

    QColor color;
    color.setHsv(120, 255, 255); // 纯绿色 (色相 120°)
    color.setHsvF(0.333, 1.0, 1.0); // 浮点 HSV
  • 查询:

    int hue = color.hue(); // 返回 120
    int saturation = color.saturation(); // 返回 255
    int value = color.value(); // 返回 255
  • 设置:

    color.setHsv(240, 128, 255); // 设置为淡蓝色
2.2.3、CMYK (Cyan, Magenta, Yellow, Key/Black)

原理与减法混色(主要用于印刷):

  • CMYK 是一种减法混色模型,基于青 (Cyan)、品红 (Magenta)、黄 (Yellow) 和黑 (Key/Black),主要用于印刷。

  • 每种分量范围为 0 到 255(整数)或 0.0 到 1.0(浮点)。

  • 黑色 (Key) 用于增强深色效果,减少三色墨水的使用。

通过青、品红、黄、黑分量创建、查询与设置:

  • 创建:

    QColor color;
    color.setCmyk(255, 0, 0, 0); // 纯青色
    color.setCmykF(1.0, 0.0, 0.0, 0.0); // 浮点 CMYK
  • 查询:

    int cyan = color.cyan(); // 返回 255
    float magentaF = color.magentaF(); // 返回 0.0
  • 设置:

    color.setCmyk(0, 255, 255, 0); // 设置为品红+黄色混合
2.2.4、HSL (Hue, Saturation, Lightness)

原理与人类感知(亮度):

  • HSL 模型类似于 HSV,但使用亮度 (Lightness) 替代明度 (Value),更符合人类对亮度的感知。

  • 色相 (Hue):同 HSV,0 到 359 度。

  • 饱和度 (Saturation):0(灰色)到 255(纯色)。

  • 亮度 (Lightness):0(黑色)到 255(白色),128 为中等亮度。

  • HSL 适合需要调整亮度而不改变色调的场景。

通过色相、饱和度、亮度创建、查询与设置:

  • 创建:

    QColor color;
    color.setHsl(60, 255, 128); // 亮黄色
    color.setHslF(0.167, 1.0, 0.5); // 浮点 HSL
  • 查询:

    int hue = color.hslHue(); // 返回 60
    int saturation = color.hslSaturation(); // 返回 255
    int lightness = color.lightness(); // 返回 128
  • 设置:

    color.setHsl(180, 128, 128); // 设置为淡青色

2.3、其他颜色表示与创建方式

2.3.1、预定义颜色名称(如 "red", "blue", "darkgray")

Qt 支持标准的 SVG 颜色名称(如 "red"、"blue"、"darkgray"),这些名称对应固定的 RGB 值。

  • 颜色名称对大小写不敏感。

  • 无效名称会导致 isValid() 返回 false。

QColor color("purple"); // 设置为紫色
color.setNamedColor("darkcyan"); // 设置为深青色

2.3.2、十六进制字符串(如 "#RRGGBB", "#AARRGGBB")

支持标准的 HTML 十六进制格式:

  • #RRGGBB:6 位表示 RGB(如 #FF0000 为红色)。

  • #AARRGGBB:8 位表示带透明度的 RGB(如 #80FF0000 为半透明红色)。

QColor color("#FF5733"); // 橙色
color.setNamedColor("#8000FF00"); // 半透明绿色

2.3.3、Qt::GlobalColor 枚举(如 Qt::red, Qt::black)

Qt 提供一组预定义的全局颜色枚举 (Qt::GlobalColor),如 Qt::red、Qt::black、Qt::transparent。

QColor color(Qt::darkBlue); // 深蓝色
color = Qt::yellow; // 黄色

2.4、颜色操作与转换

2.4.1、亮度调整 (lighter(), darker())

  • lighter(factor):使颜色变亮,factor 为百分比(默认 150 表示 1.5 倍亮度)。

  • darker(factor):使颜色变暗,factor 为百分比(默认 200 表示 0.5 倍亮度)。

  • 返回新 QColor 对象,原对象不变。

QColor color(100, 100, 100); // 中灰色
QColor lighterColor = color.lighter(150); // 更亮的灰色
QColor darkerColor = color.darker(200); // 更暗的灰色

2.4.2、颜色模型间转换 (toRgb(), toHsv(), toCmyk(), toHsl())

QColor 支持在不同颜色模型间转换,返回等效的新 QColor 对象。

  • 转换可能因模型差异导致轻微精度损失(如 CMYK 到 RGB)。

  • Alpha 通道在转换中保留。

QColor color(255, 0, 0); // 红色 (RGB)
QColor hsvColor = color.toHsv(); // 转换为 HSV
QColor cmykColor = color.toCmyk(); // 转换为 CMYK
QColor hslColor = color.toHsl(); // 转换为 HSL

2.4.3、有效性判断 (isValid())

检查 QColor 对象是否有效(即是否正确初始化)。在解析用户输入(如颜色名称或十六进制字符串)时,检查有效性以避免错误。

QColor color; // 默认构造,无效
bool valid = color.isValid(); // 返回 false
color.setRgb(255, 0, 0);
valid = color.isValid(); // 返回 true

2.5、QColor 应用

2.5.1、在 QPainter 中直接使用颜色

void MyWidget::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    painter.setBrush(QColor(255, 100, 100)); // 浅红色填充
    painter.setPen(QColor("#0000FF")); // 蓝色边框
    painter.drawRect(50, 50, 100, 100);
}

2.5.2、作为属性值设置(如 setStyleSheet)

  • 设置按钮背景和文本颜色:

    QPushButton button("Click Me");
    button.setStyleSheet("background-color: #FF5733; color: white;"); // 橙色背景,白色文本
  • 或者使用 QColor 动态生成样式表:

    QColor bgColor(100, 149, 237); // 浅蓝色
    QColor textColor(Qt::white);
    button.setStyleSheet(QString("background-color: %1; color: %2;")
                        .arg(bgColor.name()).arg(textColor.name()));

3、QPalette: 颜色方案管理

3.1、QPalette 简介

QPalette 是 Qt 框架中用于管理控件和应用程序颜色方案的类,通过为不同控件状态和角色定义颜色集合,实现统一的 UI 外观和主题化支持。

  • QPalette 是一个颜色调色板,包含多个颜色角色(ColorRole)和颜色组(ColorGroup)的颜色定义。

  • 每个颜色角色对应 UI 元素的一个特定部分(如窗口背景、按钮文本),每个颜色组对应控件的状态(如活动、禁用)。

  • 根据控件状态(启用、禁用、选中等)动态应用不同颜色,提升交互反馈。

3.1.1、部件调色板的继承机制

  • 应用程序启动时,Qt 根据操作系统和桌面环境的主题初始化全局调色板(QApplication::palette())。

  • 每个部件默认继承应用程序的调色板,除非显式设置了自定义调色板。

  • 如果部件未设置自己的调色板,它会使用父部件的调色板;若父部件也没有,则回溯至应用程序级调色板。

QWidget parent;
QPalette parentPalette;
parentPalette.setColor(QPalette::Window, Qt::darkGray);
parent.setPalette(parentPalette); // 父部件设置灰色背景
QWidget child(&parent); // 子部件继承父部件的调色板

3.1.2、自定义调色板:

  • 部件可以通过 setPalette() 设置自己的调色板,覆盖继承的调色板。

  • 自定义调色板仅影响该部件及其子部件,不影响父部件或全局调色板。

注意:

  • 调色板继承是静态的,父部件调色板的变化不会自动传播到子部件,除非子部件显式重新获取父调色板。

  • 全局调色板的变化(如 QApplication::setPalette())会影响所有未自定义调色板的部件。

3.2、颜色组 (QPalette::ColorGroup)

QPalette::ColorGroup 枚举定义了控件的三种状态,用于区分不同交互场景下的颜色:

  • QPalette::Active:控件处于活动状态(焦点或用户交互中)。

  • QPalette::Inactive:控件处于非活动状态(无焦点但可交互)。

  • QPalette::Disabled:控件被禁用,无法交互。

  • QPalette::Normal:别名,等同于 Active,用于简化代码(不推荐使用,因可能导致歧义)。

QPalette::Active

控件被用户激活(如获得焦点、被点击或悬停),适用于活动窗口的按钮、文本框或选中项。

palette.setColor(QPalette::Active, QPalette::Button, Qt::blue);

QPalette::Inactive

控件可交互但未被激活(如窗口失去焦点),适用于非活动窗口的控件,通常颜色较暗淡以示区别。

palette.setColor(QPalette::Inactive, QPalette::WindowText, Qt::darkGray);

QPalette::Disabled

控件被禁用(setEnabled(false)),不可交互,适用于禁用按钮、文本框等,通常使用灰色或低对比度颜色以示不可用。

palette.setColor(QPalette::Disabled, QPalette::ButtonText, Qt::gray);

3.3、颜色角色 (QPalette::ColorRole)

QPalette::ColorRole 枚举定义了 UI 元素的具体用途(如背景、文本),每个角色对应一种颜色或画刷(QBrush)。主要角色包括文本、背景、3D 效果、链接和工具提示等。

3.3.1、文本角色:

WindowText:

  • 用途:窗口或控件上的一般文本(如标签 QLabel 的文本)。

  • 典型应用:确保与 Window 背景高对比度(如黑色文本配白色背景)。

Text:

  • 用途:可编辑控件(如 QLineEdit、QTextEdit)的输入文本。

  • 典型应用:输入框中的用户输入文本,通常与 Base 背景搭配。

ButtonText:

  • 用途:按钮(如 QPushButton)上的文本。

  • 典型应用:按钮文本颜色,通常与 Button 背景形成对比。

BrightText:

  • 用途:需要高亮的文本(如警告或强调文本)。

  • 典型应用:错误提示或夜间模式下的高亮文本。

HighlightedText:

  • 用途:选中项的文本(如列表或表格中的选中行文本)。

  • 典型应用:与 Highlight 背景搭配,确保选中项文本清晰可见。

PlaceholderText:

  • 用途:输入框的占位符文本(如 QLineEdit 的提示文本)。

  • 典型应用:通常为浅色(如灰色),以区分实际输入文本。

3.3.2、背景角色:

Window:

  • 用途:窗口或控件的背景(如 QWidget 的背景)。

  • 典型应用:主窗口或对话框的整体背景色。

Base:

  • 用途:可编辑控件的背景(如 QLineEdit、QTextEdit)。

  • 典型应用:输入框背景,通常为白色或浅色以便输入文本清晰。

Button:

  • 用途:按钮的背景(如 QPushButton)。

  • 典型应用:按钮的默认背景,需与 ButtonText 形成对比。

Highlight:

  • 用途:选中项的背景(如列表、表格或输入框的选中区域)。

  • 典型应用:高亮选中行或文本区域,通常为亮色(如蓝色)。

ToolTipBase:

  • 用途:工具提示(QToolTip)的背景。

  • 典型应用:工具提示背景,通常为浅黄色或浅灰色。

3.3.3、3D 效果角色:

  • Light:用于控件的高光部分(如按钮的亮边)。

  • Midlight:高光和正常背景之间的过渡色。

  • Dark:用于控件的阴影部分(如按钮的暗边)。

  • Mid:介于正常和阴影之间的颜色。

  • Shadow:最暗的阴影色,用于立体效果。

  • 典型应用:这些角色共同实现按钮、滚动条等的 3D 视觉效果,增强控件立体感。

3.3.4、链接角色:

  • Link:未访问链接的颜色(通常为蓝色)。

  • LinkVisited:已访问链接的颜色(通常为紫色)。

  • 典型应用:用于 QTextBrowser 或富文本中的超链接。

3.3.5、工具提示角色:

  • ToolTipText:工具提示的文本颜色。

  • 典型应用:与 ToolTipBase 搭配,确保工具提示文本可读。

3.4、QPalette 的创建与设置

3.4.1、获取默认调色板(应用程序级、部件级)

  • 应用程序级调色板:使用 QApplication::palette() 获取全局默认调色板。示例:

    QPalette appPalette = QApplication::palette();
  • 部件级调色板:使用 QWidget::palette() 获取部件当前调色板(可能是继承的)。

    QWidget widget;
    QPalette widgetPalette = widget.palette();

3.4.2、修改调色板颜色

  • setColor(ColorGroup group, ColorRole role, const QColor &color):为特定颜色组和角色设置颜色。

    QPalette palette;
    palette.setColor(QPalette::Active, QPalette::Window, Qt::darkGray);
    palette.setColor(QPalette::Disabled, QPalette::ButtonText, Qt::gray);
  • setColor(ColorRole role, const QColor &color):为所有颜色组的指定角色设置相同颜色。

    palette.setColor(QPalette::WindowText, Qt::black); // 所有状态的窗口文本为黑色
  • setBrush(ColorGroup group, ColorRole role, const QBrush &brush):为角色设置画刷,支持颜色、渐变或纹理填充。

    QLinearGradient gradient(0, 0, 100, 100);
    gradient.setColorAt(0, Qt::white);
    gradient.setColorAt(1, Qt::blue);
    palette.setBrush(QPalette::Window, QBrush(gradient));

3.4.3、将调色板应用于部件

  • QWidget::setPalette(const QPalette &palette):为特定部件设置调色板,覆盖继承的调色板。

    QWidget widget;
    QPalette palette;
    palette.setColor(QPalette::Window, Qt::darkBlue);
    widget.setPalette(palette);
  • QWidget::setAutoFillBackground(bool) 的重要性:默认情况下,Qt 部件不自动填充背景,需启用 setAutoFillBackground(true) 才能应用 QPalette::Window 的背景色。

    widget.setAutoFillBackground(true); // 启用背景填充
    widget.setPalette(palette);

全局应用:使用 QApplication::setPalette() 设置全局调色板,影响所有未自定义调色板的部件。

3.5、QPalette 的查询

  • color(ColorGroup group, ColorRole role):查询特定颜色组和角色的颜色。

    QPalette palette = widget.palette();
    QColor windowColor = palette.color(QPalette::Active, QPalette::Window);
  • brush(ColorGroup group, ColorRole role):查询特定颜色组和角色的画刷(可能包含颜色、渐变等)。

    QBrush windowBrush = palette.brush(QPalette::Active, QPalette::Window);
    QColor color = windowBrush.color(); // 获取画刷的颜色

3.6、QPalette 与 Qt 样式表 (Style Sheets) 的关系

优先级:

样式表 (QSS) 的优先级高于 QPalette,即通过 setStyleSheet() 设置的颜色会覆盖 QPalette 的设置。

作用范围:

QPalette 适合全局或部件级的颜色管理,影响所有相关的颜色角色和状态。样式表更灵活,适合针对特定控件或伪状态(如 :hover、:disabled)进行细粒度样式设置。

3.6.1、何时选择使用 QPalette,何时选择使用样式表

使用 QPalette:

  • 需要统一管理整个应用程序或多个控件的颜色方案(如主题切换)。

  • 需要为不同状态(Active、Disabled 等)定义一致的颜色。

  • 需要与 Qt 的样式系统(如 QStyle)深度集成。

使用样式表:

  • 需要为特定控件或伪状态设置复杂的样式(如渐变、边框、悬停效果)。

  • 需要快速调整少量控件的样式,而不影响全局。

  • 需要使用 CSS 风格的灵活语法。

4、示例代码

4.1、使用 QColor 设置按钮背景颜色

  • QColor(255, 100, 100) 创建一个红色为主的 RGB 颜色。

  • 使用 setStyleSheet 通过 color.name() 设置按钮背景颜色(返回十六进制,如 #ff6464)。

#include <QApplication>
#include <QPushButton>
#include <QColor>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建按钮
    QPushButton button("Click Me");
    button.setFixedSize(200, 50);

    // 使用 QColor 设置背景颜色
    QColor color(255, 100, 100); // RGB: 红色
    button.setStyleSheet(QString("background-color: %1;").arg(color.name()));

    button.show();
    return app.exec();
}

4.2、使用 QPalette 设置窗口背景和文本颜色

  • QPalette::Window 设置窗口背景颜色为深灰色。

  • QPalette::WindowText 设置文本颜色为白色。

  • setPalette 将调色板应用到整个窗口。

#include <QApplication>
#include <QMainWindow>
#include <QLabel>
#include <QPalette>
#include <QColor>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建主窗口
    QMainWindow window;
    window.setWindowTitle("QPalette Example");
    window.resize(300, 200);

    // 创建标签
    QLabel *label = new QLabel("Hello, QPalette!", &window);
    label->move(100, 80);

    // 设置 QPalette
    QPalette palette;
    palette.setColor(QPalette::Window, QColor(50, 50, 50)); // 深灰色背景
    palette.setColor(QPalette::WindowText, Qt::white);      // 白色文本
    window.setPalette(palette);

    window.show();
    return app.exec();
}

4.3、使用 QPalette 动态切换按钮颜色

  • 创建两个 QPalette 对象,分别设置绿色和红色按钮背景。

  • 通过按钮点击信号切换调色板,实现颜色动态变化。

  • QPalette::Button 控制按钮的背景颜色。

#include <QApplication>
#include <QPushButton>
#include <QPalette>
#include <QColor>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建按钮
    QPushButton button("Toggle Color");
    button.setFixedSize(200, 50);

    // 创建两个 QPalette
    QPalette palette1, palette2;
    palette1.setColor(QPalette::Button, QColor(100, 200, 100)); // 绿色
    palette2.setColor(QPalette::Button, QColor(200, 100, 100)); // 红色

    bool isPalette1 = true;

    // 连接按钮点击信号以切换调色板
    QObject::connect(&button, &QPushButton::clicked, [&]() {
        button.setPalette(isPalette1 ? palette2 : palette1);
        isPalette1 = !isPalette1;
    });

    button.show();
    return app.exec();
}

4.4、使用 QColor 和 QPalette 设置复杂控件样式

  • QPalette::Base 设置文本编辑框的背景颜色(浅灰色)。

  • QPalette::Text 设置输入文本颜色(深蓝色)。

  • QPalette::Highlight 和 QPalette::HighlightedText 控制选中文字的背景和前景色。

#include <QApplication>
#include <QMainWindow>
#include <QTextEdit>
#include <QPalette>
#include <QColor>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建主窗口
    QMainWindow window;
    window.setWindowTitle("Complex QPalette Example");
    window.resize(400, 300);

    // 创建文本编辑框
    QTextEdit *textEdit = new QTextEdit(&window);
    textEdit->setGeometry(50, 50, 300, 200);

    // 设置 QPalette
    QPalette palette;
    palette.setColor(QPalette::Base, QColor(240, 240, 240));    // 文本框背景
    palette.setColor(QPalette::Text, QColor(0, 0, 128));        // 文本颜色
    palette.setColor(QPalette::Highlight, QColor(0, 120, 215)); // 高亮背景
    palette.setColor(QPalette::HighlightedText, Qt::red);     // 高亮文本
    textEdit->setPalette(palette);

    window.show();
    return app.exec();
}

八. 图标和光标

支持图标和鼠标光标管理。

  • QIcon: 图标管理,支持多分辨率和状态。

  • QCursor: 鼠标光标样式和自定义形状。

  • QIconEngine: 自定义图标渲染引擎。

九. 平台和渲染后端

提供平台特定集成和渲染后端支持。

  • QPlatformIntegration: 平台特定的窗口系统集成(Windows、X11、Wayland 等)。

  • QRasterPaintEngine: 软件光栅化渲染引擎。

  • QPlatformSurface: 平台特定的渲染表面。

  • QPlatformTheme: 平台主题(如按钮样式、对话框风格)。

  • QPlatformGraphicsBuffer: 平台特定的图形缓冲区。

  • QPlatformSharedGraphicsCache: 共享图形缓存,加速渲染。

十. 国际化(GUI 相关)

支持 GUI 相关的字符编码和区域设置。

  • QTextCodec(部分):字符编码支持(仅限 GUI 文本显示)。

  • QLocale(部分):区域设置(仅限 GUI 格式,如日期、数字显示)。

本文标签: 详细说明 模块 外观 颜色 功能