外观和样式(02):【类】QColor [官翻]

QColor Class

QColor类提供基于RGB,HSV或CMYK值的颜色。

Header#include < QColor >
qmakeQT += gui
Inherits
Inherited By

详细说明

通常使用RGB(红色,绿色和蓝色)成分来指定颜色,但是也可以使用HSV(色相,饱和度和值)和CMYK(青色,品红色,黄色和黑色)来指定颜色成分。 另外,可以使用颜色名称指定颜色。 颜色名称可以是任何SVG 1.0颜色名称。

RGBHSVCMYK
imgimgimg

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对象。

https://doc.qt.io/qt-5/images/qt-colors.png

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混合图形。

公共类型

  1. enum NameFormat
    如何格式化name()函数的输出

    ConstantValueDescription
    QColor::HexRgb0#RRGGBB一个“#”字符,后跟三个两位十六进制数字(即,#RRGGBB)。
    QColor::HexArgb1#AARRGGBB一个“#”字符,后跟四个两位十六进制数字(即,#AARRGGBB)。
  2. enum Spec
    指定的颜色类型,即RGB,扩展RGB,HSV,CMYK或HSL。

    ConstantValue
    QColor::Invalid0
    QColor::Rgb1
    QColor::Hsv2
    QColor::Cmyk3
    QColor::Hsl4
    QColor::ExtendedRgb5

公共函数

  1. 构造函数
    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)

  2. 有效性
    bool isValid() const

  3. 获取浅色、深色
    QColor lighter(int factor = 150) const
    QColor darker(int factor = 200) const

  4. 颜色空间
    QColor convertTo(QColor::Spec colorSpec) const
    QColor::Spec spec() const

  5. 颜色名称

    • 获取颜色名称
      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”。

    • 透明-表示没有颜色。
  1. 转换QVariant
    QVariant operator QVariant() const

  2. 赋值操作
    QColor & operator=(const QColor &color)

  3. alpha通道
    int alpha() const
    qreal alphaF() const
    void setAlpha(int alpha)
    void setAlphaF(qreal alpha)

  4. 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)

  5. 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)

  6. 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)

  7. 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)

  8. 比较运算
    bool operator!=(const QColor &color) const
    QColor & operator=(Qt::GlobalColor color)
    bool operator==(const QColor &color) const

公共静态函数

  1. 返回颜色名称列表
    QStringList colorNames()
  2. 颜色空间转换成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)
  3. 数据是否有效
    bool isValidColor(const QString &name)
    bool isValidColor(QStringView name)
    bool isValidColor(QLatin1String name)

相关的函数

  1. typedef QRgb
    typedef unsigned int QRgb;格式为#AARRGGBB的ARGB四元组,等效于unsigned int。
    该类型保存Alpha通道的值。 默认的Alpha通道为ff,即不透明。
  2. 获取Alpha值
    int qAlpha(QRgb rgba)
    uint qAlpha(QRgba64 rgba64)
  3. 获取blue值
    int qBlue(QRgb rgb)
    uint qBlue(QRgba64 rgba64)
  4. 获取灰度
    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值。
  5. 获取green
    int qGreen(QRgb rgb)
    uint qGreen(QRgba64 rgba64)
  6. 获取red
    int qRed(QRgb rgb)
    uint qRed(QRgba64 rgba64)
  7. 获取RGB
    QRgb qRgb(int r, int g, int b)
    QRgb qRgba(int r, int g, int b, int a)
  8. 获取RGBA
    QRgba64 qRgba64(quint16 r, quint16 g, quint16 b, quint16 a)
    QRgba64 qRgba64(quint64 c)
  9. 换成预乘的格式
    QRgb qPremultiply(QRgb rgb)
    QRgba64 qPremultiply(QRgba64 rgba64)
  10. 换成未预乘的格式
    QRgb qUnpremultiply(QRgb rgb)
    QRgba64 qUnpremultiply(QRgba64 rgba64)
  11. 数据流相关
    QDataStream & operator<<(QDataStream &stream, const QColor &color)
    QDataStream & operator>>(QDataStream &stream, QColor &color)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值