目录
一. 窗口和屏幕管理
二. 绘图和渲染
三. 图像处理
四. 字体和文本
五. 事件和输入处理
六. 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 格式,如日期、数字显示)。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1754948912a5219616.html
评论列表(0条)