外观和样式(02):【类】QColor [官翻]
QColor Class
QColor类提供基于RGB,HSV或CMYK值的颜色。
Header | #include < QColor > |
---|---|
qmake | QT += gui |
Inherits | |
Inherited By |
详细说明
通常使用RGB(红色,绿色和蓝色)成分来指定颜色,但是也可以使用HSV(色相,饱和度和值)和CMYK(青色,品红色,黄色和黑色)来指定颜色成分。 另外,可以使用颜色名称指定颜色。 颜色名称可以是任何SVG 1.0颜色名称。
RGB | HSV | CMYK |
---|---|---|
QColor构造函数根据RGB值创建颜色。 要创建基于HSV或CMYK值的QColor,请分别使用toHsv()和toCmyk()函数。 这些函数使用所需的格式返回颜色的副本。 此外,静态fromRgb(),fromHsv()和fromCmyk()函数会根据指定的值创建颜色。 另外,也可以使用convertTo()函数将颜色转换为三种格式中的任何一种(以所需格式返回颜色的副本),或者使用setRgb(),setHsv()和setCmyk()函数中的任何一种将颜色转换为三种格式 颜色的格式。 函数spec()告诉您如何指定颜色。
通过将RGB字符串(例如“#112233”)或ARGB字符串(例如“#ff112233”)或颜色名称(例如“ blue”)传递给setNamedColor()函数来设置颜色。 颜色名称取自SVG 1.0颜色名称。 name()函数以“ #RRGGBB”格式返回颜色的名称。 还可以使用setRgb(),setHsv()和setCmyk()设置颜色。 要获得较浅或较深的颜色,请分别使用lighter()和darker()函数。
函数isValid()指示QColor是否完全合法。 例如,RGB值超出范围的RGB颜色是非法的。 出于性能方面的考虑,QColor大多不考虑非法颜色,因此,使用无效颜色的结果是不确定的。
颜色分量可以单独获取,例如使用red(),hue()和cyan()。 还可以使用getRgb(),getHsv()和getCmyk()函数一次性检索颜色分量的值。 使用RGB颜色模型,还可以使用rgb()访问颜色分量。
有几个相关的非成员:QRgb是一个无符号int的typdef,它表示RGB值三元组(r,g,b)。 请注意,它也可以保存alpha通道的值(有关更多信息,请参见Alpha混合图部分)。 qRed(),qBlue()和qGreen()函数返回给定QRgb值的各个分量,而qRgb()和qRgba()函数根据给定的分量值创建并返回QRgb三元组。 最后,qAlpha()函数返回提供的QRgb的alpha分量,而qGray()函数根据给定值计算并返回灰度值。
QColor是平台和设备独立的。 QColormap类将颜色映射到硬件。
整数和浮点精度
QColor支持浮点精度,并提供所有颜色组件功能的浮点版本,例如 getRgbF(),hueF()和fromCmykF()。 请注意,由于使用16位整数存储组件,因此,由于舍入,在使用setRgbF()设置的值与getRgbF()函数返回的值之间可能会有微小的偏差。
基于整数的函数的取值范围为0-255(hue()除外,其值必须在0-359范围内),浮点函数接受的取值范围为0.0-1.0。
Alpha混合绘制
QColor还支持Alpha混合轮廓和填充。 颜色的Alpha通道指定透明效果,0表示完全透明的颜色,而255表示完全不透明的颜色。 例如:
// 指定半透明的红painter.setBrush(QColor(255, 0, 0, 127));painter.drawRect(0, 0, width()/2, height());// 指定半透明的蓝painter.setBrush(QColor(0, 0, 255, 127));painter.drawRect(0, 0, width(), height()/2);
上面的代码效果如下:
如果颜色的值为整数,则可以使用alpha()和setAlpha()函数来检索和设置颜色的alpha通道;如果颜色的值为qreal(双精度),则可以使用alphaF()和setAlphaF()来检索和设置颜色。 默认情况下,alpha通道设置为255(不透明)。 要一次性获取并设置所有RGB颜色分量(包括alpha通道),请使用rgba()和setRgba()函数。
预定义的颜色
QColorConstants命名空间中有20个预定义的QColor对象,包括黑色,白色,主要和辅助颜色,这些颜色的较暗版本以及三种灰度。 此外,QColorConstants :: Svg命名空间为标准SVG颜色关键字名称定义了QColor对象。
QColorConstants :: Color0,QColorConstants :: Color1和QColorConstants ::Transparent 用于特殊目的。
QColorConstants::Color0(零像素值)和QColorConstants::Color1(非零像素值)是QBitmaps中绘制的特殊颜色。设置位图位为0(透明;例如,背景),和使用c{QColorConstants::Color1}绘制将位设置为1(不透明;例如,前景)。
QColorConstants :: Transparent用于指示透明像素。 使用此值绘画时,将使用适合所使用的基础像素格式的像素值。
由于历史原因,Qt :: GlobalColor枚举中还提供了20种预定义的颜色。
最后,QColor可以识别各种颜色名称(作为字符串)。 static colorNames()函数返回QColor知道的QStringList颜色名称。
扩展RGB颜色模型
扩展的RGB颜色模型,也被称为scRGB颜色空间,是相同的RGB颜色模型,但是它允许数值低于0.0和超过1.0。这样就可以表示在RGB色彩空间范围之外的颜色,但仍然对RGB色彩空间内的颜色使用相同的值。
HSV颜色模型
RGB模型是面向硬件的。它的表现接近于大多数监视器所显示的。相比之下,HSV代表颜色的方式更适合人类对颜色的感知。例如,“stronger than”、“darker than”和“the opposite of”这些关系在HSV中很容易表达,但在RGB中就很难表达。
- H表示色调,如果颜色是彩色的(不是灰色的),则在范围0到359,如果是灰色的,则没有意义。它代表大多数人熟悉的色轮上的度数。红色是0度,绿色是120度,蓝色是240度。
- S表示饱和度,在0到255之间,S越大,颜色越强。浅灰色的饱和度接近0;非常强烈的色彩饱和度接近255。
- V表示值,在0到255之间,表示颜色的亮度或亮度。0是黑色的;255离黑色越远越好。
以下是一些示例:纯红色为H = 0,S = 255,V = 255; 深红色,朝品红色略微移动,可能是H = 350(相当于-10),S = 255,V = 180; 浅灰色红色可能具有大约0的H(例如350-359或0-10),S大约50-100和S = 255。
对于非彩色,Qt返回的色相值为-1。 如果您传递的色相值太大,则Qt会强制它进入范围。 色相360或720被视为0; 色调540被视为180。
除了标准的HSV模型外,Qt还提供了一个alpha通道,以具有alpha混合绘图功能。
HSL颜色模型
HSL与HSV相似,但是HSL指定了“亮度”参数,而不是“值”参数,该参数映射到颜色的亮度有些不同。
类似地,对于相同的颜色,HSL饱和度值通常与HSV饱和度值不同。 hslSaturation()提供颜色的HSL饱和度值,而aturation()和hsvSaturation()提供HSV饱和度值。
在HSL和HSV中,色相值定义为相同。
2.7 CMYK颜色模型
RGB和HSV颜色模型用于在计算机监视器上显示时,CMYK模型用于印刷机和某些硬拷贝设备的四色打印过程中。
CMYK具有四个成分,都在0-255范围内:青色(C),洋红色(M),黄色(Y)和黑色(K)。青色,洋红色和黄色称为减色; CMYK颜色模型通过从白色表面开始然后通过应用适当的分量减去颜色来创建颜色。将青色,品红色和黄色组合在一起时,颜色为黑色,而减去一种或多种则将产生任何其他颜色。当以各种百分比组合时,这三种颜色可以创建整个颜色范围。
将100%的青色,品红色和黄色混合会产生黑色,但结果不令人满意,因为它浪费了墨水,增加了干燥时间并在打印时产生了混浊的颜色。因此,在专业印刷中添加黑色以提供纯黑色调。因此,术语“四色处理”。
除了标准的CMYK模型外,Qt还提供了一个Alpha通道以具有Alpha混合图形。
公共类型
enum NameFormat
如何格式化name()函数的输出Constant Value Description QColor::HexRgb 0 #RRGGBB一个“#”字符,后跟三个两位十六进制数字(即,#RRGGBB)。 QColor::HexArgb 1 #AARRGGBB一个“#”字符,后跟四个两位十六进制数字(即,#AARRGGBB)。 enum Spec
指定的颜色类型,即RGB,扩展RGB,HSV,CMYK或HSL。Constant Value QColor::Invalid 0 QColor::Rgb 1 QColor::Hsv 2 QColor::Cmyk 3 QColor::Hsl 4 QColor::ExtendedRgb 5
公共函数
构造函数
QColor()
QColor(const char *name)
QColor(const QColor &color)
QColor(const QString &name)
QColor(int r, int g, int b, int a = 255)
QColor(QLatin1String name)
QColor(QRgb color)
QColor(QRgba64 rgba64)
QColor(Qt::GlobalColor color)有效性
bool isValid() const获取浅色、深色
QColor lighter(int factor = 150) const
QColor darker(int factor = 200) const颜色空间
QColor convertTo(QColor::Spec colorSpec) const
QColor::Spec spec() const颜色名称
获取颜色名称
QString name() const : "#RRGGBB"格式
QString name(QColor::NameFormat format) const : 指定格式 比如:#AARRGGBB设置颜色名称
void setNamedColor(const QString &name)
void setNamedColor(QStringView name)
void setNamedColor(QLatin1String name)
#RGB (R、G和B都是一个十六进制数字)
#RRGGBB
#AARRGGBB
#RRRGGGBBB
#RRRRGGGGBBBB
SVG颜色名称
例如,“steelblue”或“gainsboro”。- 透明-表示没有颜色。
转换QVariant
QVariant operator QVariant() const赋值操作
QColor & operator=(const QColor &color)alpha通道
int alpha() const
qreal alphaF() const
void setAlpha(int alpha)
void setAlphaF(qreal alpha)RGB模型
int blue() const
int green() const
int red() const
QColor toExtendedRgb() const
QColor toRgb() const
qreal blueF() const
qreal greenF() const
qreal redF() const
QRgb rgb() const
QRgb rgba() const
QRgba64 rgba64() const
void getRgb(int *r, int *g, int *b, int *a = nullptr) const
void getRgbF(qreal *r, qreal *g, qreal *b, qreal *a = nullptr) const
void setBlue(int blue)
void setBlueF(qreal blue)
void setGreen(int green)
void setGreenF(qreal green)
void setRed(int red)
void setRedF(qreal red)
void setRgb(int r, int g, int b, int a = 255)
void setRgb(QRgb rgb)
void setRgba(QRgb rgba)
void setRgba64(QRgba64 rgba)
void setRgbF(qreal r, qreal g, qreal b, qreal a = 1.0)HSV模型
int hsvHue() const
int hsvSaturation() const
int hue() const
int saturation() const
int value() const
QColor toHsv() const
qreal hsvHueF() const
qreal hsvSaturationF() const
qreal hueF() const
qreal saturationF() const
qreal valueF() const
void getHsv(int *h, int *s, int *v, int *a = nullptr) const
void getHsvF(qreal *h, qreal *s, qreal *v, qreal *a = nullptr) const
void setHsv(int h, int s, int v, int a = 255)
void setHsvF(qreal h, qreal s, qreal v, qreal a = 1.0)HSL模型
int hslHue() const
int hslSaturation() const
int lightness() const
QColor toHsl() const
qreal hslHueF() const
qreal hslSaturationF() const
qreal lightnessF() const
void getHsl(int *h, int *s, int *l, int *a = nullptr) const
void getHslF(qreal *h, qreal *s, qreal *l, qreal *a = nullptr) const
void setHsl(int h, int s, int l, int a = 255)
void setHslF(qreal h, qreal s, qreal l, qreal a = 1.0)CMYK模型
int black() const
int cyan() const
int magenta() const
int yellow() const
QColor toCmyk() const
qreal blackF() const
qreal cyanF() const
qreal magentaF() const
qreal yellowF() const
void getCmyk(int *c, int *m, int *y, int *k, int *a = nullptr) const
void getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *a = nullptr) const
void setCmyk(int c, int m, int y, int k, int a = 255)
void setCmykF(qreal c, qreal m, qreal y, qreal k, qreal a = 1.0)比较运算
bool operator!=(const QColor &color) const
QColor & operator=(Qt::GlobalColor color)
bool operator==(const QColor &color) const
公共静态函数
- 返回颜色名称列表
QStringList colorNames() - 颜色空间转换成QColor
QColor fromCmyk(int c, int m, int y, int k, int a = 255)
QColor fromCmykF(qreal c, qreal m, qreal y, qreal k, qreal a = 1.0)
QColor fromHsl(int h, int s, int l, int a = 255)
QColor fromHslF(qreal h, qreal s, qreal l, qreal a = 1.0)
QColor fromHsv(int h, int s, int v, int a = 255)
QColor fromHsvF(qreal h, qreal s, qreal v, qreal a = 1.0)
QColor fromRgb(QRgb rgb)
QColor fromRgb(int r, int g, int b, int a = 255)
QColor fromRgba64(ushort r, ushort g, ushort b, ushort a = USHRT_MAX)
QColor fromRgba64(QRgba64 rgba64)
QColor fromRgbF(qreal r, qreal g, qreal b, qreal a = 1.0)
QColor fromRgba(QRgb rgba) - 数据是否有效
bool isValidColor(const QString &name)
bool isValidColor(QStringView name)
bool isValidColor(QLatin1String name)
相关的函数
- typedef QRgb
typedef unsigned int QRgb;
格式为#AARRGGBB的ARGB四元组,等效于unsigned int。
该类型保存Alpha通道的值。 默认的Alpha通道为ff,即不透明。 - 获取Alpha值
int qAlpha(QRgb rgba)
uint qAlpha(QRgba64 rgba64) - 获取blue值
int qBlue(QRgb rgb)
uint qBlue(QRgba64 rgba64) - 获取灰度
int qGray(int r, int g, int b)
int qGray(QRgb rgb)
从(r,g,b)三元组返回灰度值(0到255)。使用公式(r * 11 + g * 16 + b * 5)/ 32计算灰度值,忽略alpha值。 - 获取green
int qGreen(QRgb rgb)
uint qGreen(QRgba64 rgba64) - 获取red
int qRed(QRgb rgb)
uint qRed(QRgba64 rgba64) - 获取RGB
QRgb qRgb(int r, int g, int b)
QRgb qRgba(int r, int g, int b, int a) - 获取RGBA
QRgba64 qRgba64(quint16 r, quint16 g, quint16 b, quint16 a)
QRgba64 qRgba64(quint64 c) - 换成预乘的格式
QRgb qPremultiply(QRgb rgb)
QRgba64 qPremultiply(QRgba64 rgba64) - 换成未预乘的格式
QRgb qUnpremultiply(QRgb rgb)
QRgba64 qUnpremultiply(QRgba64 rgba64) - 数据流相关
QDataStream & operator<<(QDataStream &stream, const QColor &color)
QDataStream & operator>>(QDataStream &stream, QColor &color)
外观和样式(02):【类】QColor [官翻]相关推荐
- Qt 线程(02):线程类【官翻】
线程类 类名 简介 Concurrent Filter and Filter-Reduce Concurrent Map and Map-Reduce Concurrent Run QAtomicIn ...
- QSettings 类【官翻】
文章目录 详述 基本用法 QVariant和GUI类型 Section 和 Key 的语法 后备机制 恢复GUI应用程序的状态 同时从多个线程或进程访问设置 特定于平台的说明 应用程序设置的存储位置 ...
- QFile 类【官翻】
文章目录 详述 直接读取文件 使用流读取文件 信号 平台特定问题 公共类型 公共函数 重新实现的公共函数 静态公用函数 QFile 类 QFile类提供用于读取和写入文件的接口. Header: #i ...
- QFileInfo 类【官翻】
文章目录 详述 性能问题 公共函数 创建及析构 目录 路径.文件名及后缀 时间信息 缓存 属性 类型 访问权限 比较 静态公用函数 相关的非成员 QFileInfo 类 QFileInfo类提供与系统 ...
- QFileDevice 类【官翻】
文章目录 一.详述 二.公共类型 三.公共函数 四.重新实现的公共函数 五.重新实现受保护的函数 QFileDevice 类 QFileDevice类提供用于读取和写入打开文件的接口. Header: ...
- QStorageInfo 类【官翻】
文章目录 详述 公共函数 静态公共函数 相关非成员 QStorageInfo 类 提供有关当前安装的存储和驱动器的信息. Header: #include < QStorageInfo > ...
- Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻)
Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻) 确定显示屏型号 扩展版类(shield) 转接板类(breakout Board) 目前支持的显示屏 ...
- 干货丨总结5类面试官特点和应对方法
秋招已经结束,年后春招即将拉开帷幕,想必大家都已经参加了不少面试,也见了不少面试官,俗话说知己知彼,百战不殆,推荐下面这篇文章,一起看看面试官可以分成哪几类以及应对的方法~ 一.虚张声势型 故意虚张声 ...
- 还是有点香!苹果官翻2018款iPad Pro及MacBook Air上架
在18日晚间新版iPad Pro及新款MacBook Air低调发布后,2018款iPad Pro以及老款MacBook Air也迅速在Apple Store中遭遇了下架处理.虽然消费者仍然可以通过第 ...
最新文章
- 线程组名称_Netty在Dubbo中的线程名称
- 3/14课程 第三章 结构化的项目前期和面向对象的项目前期实例
- 我收集的鼠标指针样式-比较经典
- MySQL服务端的登录和退出
- 日历记事本java代码_急需日历记事本JAVA源代码
- 解决margin塌陷的问题_解决margin塌陷与margin合并(margin)清除浮动问题
- 数据结构与算法 完整版单链表(附GIF)
- java防止浏览器直接打开下载的文件
- memcached学习笔记(1)——memcached原理
- 保姆级别mysql 基础练习题
- shell脚本编程基础(三)
- react代码编辑器 react-ace
- U-BOOT 下载 GitHub
- 思科wlc产品文档_思科认证EI CCIE和SP CCIE 怎么选?零基础入门或是网工深造都建议收藏...
- java求素数的方式
- S3C2450自动升级[原创作品,转载请注明出处]
- oracle里的tns是什么意思
- Ubuntu下安装Moodle平台
- 解谜游戏 MU Complex 的过关图文攻略 (Episode2)(中)
- Windows Server 2008 Standard Enterprise Datacenter各个版本区别