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

公共类型

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

    Constant Value Description
    QColor::HexRgb 0 #RRGGBB一个“#”字符,后跟三个两位十六进制数字(即,#RRGGBB)。
    QColor::HexArgb 1 #AARRGGBB一个“#”字符,后跟四个两位十六进制数字(即,#AARRGGBB)。
  2. 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

公共函数

  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)

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

  1. Qt 线程(02):线程类【官翻】

    线程类 类名 简介 Concurrent Filter and Filter-Reduce Concurrent Map and Map-Reduce Concurrent Run QAtomicIn ...

  2. QSettings 类【官翻】

    文章目录 详述 基本用法 QVariant和GUI类型 Section 和 Key 的语法 后备机制 恢复GUI应用程序的状态 同时从多个线程或进程访问设置 特定于平台的说明 应用程序设置的存储位置 ...

  3. QFile 类【官翻】

    文章目录 详述 直接读取文件 使用流读取文件 信号 平台特定问题 公共类型 公共函数 重新实现的公共函数 静态公用函数 QFile 类 QFile类提供用于读取和写入文件的接口. Header: #i ...

  4. QFileInfo 类【官翻】

    文章目录 详述 性能问题 公共函数 创建及析构 目录 路径.文件名及后缀 时间信息 缓存 属性 类型 访问权限 比较 静态公用函数 相关的非成员 QFileInfo 类 QFileInfo类提供与系统 ...

  5. QFileDevice 类【官翻】

    文章目录 一.详述 二.公共类型 三.公共函数 四.重新实现的公共函数 五.重新实现受保护的函数 QFileDevice 类 QFileDevice类提供用于读取和写入打开文件的接口. Header: ...

  6. QStorageInfo 类【官翻】

    文章目录 详述 公共函数 静态公共函数 相关非成员 QStorageInfo 类 提供有关当前安装的存储和驱动器的信息. Header: #include < QStorageInfo > ...

  7. Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻)

    Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻) 确定显示屏型号 扩展版类(shield) 转接板类(breakout Board) 目前支持的显示屏 ...

  8. 干货丨总结5类面试官特点和应对方法

    秋招已经结束,年后春招即将拉开帷幕,想必大家都已经参加了不少面试,也见了不少面试官,俗话说知己知彼,百战不殆,推荐下面这篇文章,一起看看面试官可以分成哪几类以及应对的方法~ 一.虚张声势型 故意虚张声 ...

  9. 还是有点香!苹果官翻2018款iPad Pro及MacBook Air上架

    在18日晚间新版iPad Pro及新款MacBook Air低调发布后,2018款iPad Pro以及老款MacBook Air也迅速在Apple Store中遭遇了下架处理.虽然消费者仍然可以通过第 ...

最新文章

  1. 线程组名称_Netty在Dubbo中的线程名称
  2. 3/14课程 第三章 结构化的项目前期和面向对象的项目前期实例
  3. 我收集的鼠标指针样式-比较经典
  4. MySQL服务端的登录和退出
  5. 日历记事本java代码_急需日历记事本JAVA源代码
  6. 解决margin塌陷的问题_解决margin塌陷与margin合并(margin)清除浮动问题
  7. 数据结构与算法 完整版单链表(附GIF)
  8. java防止浏览器直接打开下载的文件
  9. memcached学习笔记(1)——memcached原理
  10. 保姆级别mysql 基础练习题
  11. shell脚本编程基础(三)
  12. react代码编辑器 react-ace
  13. U-BOOT 下载 GitHub
  14. 思科wlc产品文档_思科认证EI CCIE和SP CCIE 怎么选?零基础入门或是网工深造都建议收藏...
  15. java求素数的方式
  16. S3C2450自动升级[原创作品,转载请注明出处]
  17. oracle里的tns是什么意思
  18. Ubuntu下安装Moodle平台
  19. 解谜游戏 MU Complex 的过关图文攻略 (Episode2)(中)
  20. Windows Server 2008 Standard Enterprise Datacenter各个版本区别

热门文章

  1. 【Mysql】union的用法
  2. php的单引号和双引号的问题
  3. 优酷视频转码MP4格式
  4. HTML引用外部css的路径
  5. catia车灯设计——利用参数创建蜂窝加强筋
  6. Halcon 单相机标定
  7. linux里面工具使用方法,linux免费查毒工具clamav安装和使用教程
  8. 智慧养老机构管理系统提高养老的质量和安全保障
  9. Mmseg分词算法及实现
  10. 读取BMP图像每一像素点RGB数据