Qt扫盲-QColor 理论使用总结

news2024/12/25 9:02:33

QColor 理论使用总结

  • 一、概述
    • 1. 构造函数
    • 2. 合法性校验
    • 3. 组成值检索
  • 二、整数与浮点精度
  • 三、Alpha-Blended Alpha混合图
  • 四、预定义颜色
  • 五、扩展的RGB颜色模型
  • 六、HSV颜色模型
  • 七、HSL颜色模型
  • 八、CMYK颜色模型

一、概述

QColor 是Qt里面描绘颜色的一个属性类,这个类是在Qt GUI模块里面的,这样就可以知道这个类是与GUI相关。像显示他背景颜色等等,在绘图的时候之类的都会用这个类。

在颜色理论体系中:一种颜色通常用RGB(红、绿、蓝)组成值来指定,但也可以用HSV(色调、饱和度和值)和CMYK(青色、品红、黄色和黑色)组成值来指定。此外,还可以使用颜色名称来指定颜色。颜色名称可以是SVG 1.0的任何颜色名称。

在这里插入图片描述

在不同的应用场景有不同的颜色体系,在界面很多使用这个类的时候,基本上都是用的RGB色系。传的参数也是三个值,最常用的就是这个构造函数。

1. 构造函数

QColor 构造函数根据RGB值创建颜色。要基于HSV或CMYK值创建QColor,分别使用 toHsv() 和 toCmyk()函数。这些函数使用所需格式返回颜色的副本。此外,静态的 fromRgb()、fromHsv()和fromCmyk() 函数根据指定的值创建颜色。

另外,可以使用convertTo()函数(返回所需格式的颜色副本)将颜色转换为三种格式中的任何一种,或者使用setRgb()、setHsv()和setCmyk()函数中的任何一种来更改该颜色的格式。spec()函数告诉我们如何指定颜色。

可以通过将RGB字符串(如 “#112233” )或 ARGB 字符串 (如 “#ff112233” ) 或颜色名称 (如 “蓝色” )传递给 setNamedColor() 函数来设置颜色。颜色名称取自 SVG 1.0 颜色名称。

函数的作用是:返回颜色的名称,格式为 “#RRGGBB”。颜色也可以使用 setRgb(), setHsv() 和 setCmyk() 来设置。要获得较浅或较深的颜色,分别使用 lighter() 和 deeper() 函数。

SVG 1.0 链接

下面是颜色的对应的关键名称
在这里插入图片描述

构造函数

QColor(const QColor &color)
QColor(QLatin1String name)
QColor(const char *name)
QColor(const QString &name)
QColor(QRgba64 rgba64)
QColor(QRgb color)
QColor(int r, int g, int b, int a = ...)
QColor(Qt::GlobalColor color)

静态函数

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)

2. 合法性校验

isValid() 函数指示 QColor 是否合法。例如,超出RGB值范围的RGB颜色是非法的。出于性能原因,QColor通常忽略非法颜色,因此,使用无效颜色的结果是未定义的。

3. 组成值检索

颜色组成值可以单独检索,例如使用 red()、hue() 和 cyan()。也可以使用 getRgb()、getHsv() 和 getCmyk() 函数一次检索颜色组成值的值。使用RGB颜色模型,还可以使用RGB() 访问颜色组成值。

有几个相关的非成员:QRgb是一个代表RGB值三元组(r, g, b)的无符号整型的typdef。注意,它也可以保存alpha通道的值(更多信息,参见alpha混合绘图部分)。qRed()、qBlue()和qGreen()函数分别返回给定QRgb值的组成值,而QRgb()和qRgba()函数根据给定的组成值值创建并返回QRgb三元组。最后,qAlpha()函数返回所提供的QRgb的alpha分量,qGray()函数根据给定的值计算并返回一个灰度值。

QColor是平台和设备独立的。QColormap类将颜色映射到硬件。

二、整数与浮点精度

QColor支持浮点精度,并提供所有颜色组成值函数的浮点版本,例如getRgbF(), hueF()和frommykf()。请注意,由于组成值是使用16位整数存储的,因此使用(例如)setRgbF()设置的值与getRgbF()函数返回的值之间可能存在较小的偏差,这是由于舍入造成的。

基于整数的函数接受0-255范围内的值(hue()除外,它的值必须在0-359范围内),浮点函数接受0.0 - 1.0范围内的值。

三、Alpha-Blended Alpha混合图

QColor还支持阿尔法混合轮廓和填充。颜色的alpha通道指定透明度效果,0表示完全透明的颜色,而255表示完全不透明的颜色。例如:

  // Specify semi-transparent red
  painter.setBrush(QColor(255, 0, 0, 127));
  painter.drawRect(0, 0, width()/2, height());

  // Specify semi-transparent blue
  painter.setBrush(QColor(0, 0, 255, 127));
  painter.drawRect(0, 0, width(), height()/2);

上面的代码产生以下输出:
在这里插入图片描述

如果它的值是整数,使用alphaF()和setAlphaF()函数,如果它的值是qreal (double),则使用alphaF()和setAlphaF()函数。缺省情况下,alpha-channel设置为255(不透明)。要一次检索和设置所有RGB颜色组成值(包括alpha通道),请使用rgba()和setRgba()函数。

四、预定义颜色

在QColorConstants名称空间中有20个预定义的QColor对象,包括黑色、白色、主要和次要颜色、这些颜色的较深版本以及三种灰色。此外,QColorConstants::Svg名称空间为标准Svg颜色关键字名称定义了QColor对象。
在这里插入图片描述

QColorConstants::Color0、QColorConstants::Color1和QColorConstants::Transparent颜色用于特殊目的。

QColorConstants::Color0(零像素值)和QColorConstants::Color1(非零像素值)是在qbitmap中绘制的特殊颜色。使用QColorConstants::Color0设置位图位为0(透明;例如,背景),并使用c{QColorConstants::Color1}将位数设置为1 (opaque;例如,前景)。

QColorConstants: Transparent用于表示透明像素。当使用此值进行绘制时,将使用适合所使用的底层像素格式的像素值。

由于历史原因,这20种预定义的颜色也可以在Qt::GlobalColor枚举中使用。

最后,QColor识别各种颜色名称(作为字符串);静态colorNames()函数返回QColor知道的QStringList颜色名称。

五、扩展的RGB颜色模型

扩展的RGB颜色模型,也称为scRGB颜色空间,与RGB颜色模型相同,只是它允许低于0.0和大于1.0的值。这样就可以表示在RGB色彩空间范围之外的颜色,但仍然对RGB色彩空间内的颜色使用相同的值。

六、HSV颜色模型

RGB模型是面向硬件的。它的表现与大多数监视器显示的接近。相比之下,HSV表示颜色的方式更适合人类对颜色的感知。例如,“比强”、“比暗”和“相反”的关系在HSV中很容易表达,但在RGB中却很难表达。
HSV和RGB一样,有三个组成部分:

  • H表示色相,如果颜色是彩色的(不是灰色的),则在0到359的范围内,如果是灰色则没有意义。它代表了大多数人熟悉的色轮上的度数。红色是0度,绿色是120度,蓝色是240度。
    在这里插入图片描述

  • S表示饱和度,在0到255的范围内,它越大,颜色越强。灰色的颜色饱和度接近0;非常强烈的颜色饱和度接近255。
    在这里插入图片描述

  • V表示值,取值范围为0到255,表示颜色的明度或亮度。0是黑色;255离黑色越远越好。
    在这里插入图片描述

这里有一些例子:纯红色是H=0, S=255, V=255;深红色,稍微向品红移动,可能是H=350(相当于-10),S=255, V=180;浅灰红色的H值约为0(例如350-359或0-10),S值约为50-100,S=255。

对于消色差的颜色,Qt返回色相值-1。如果您传递的色调值太大,Qt将强制它进入范围。Hue 360或720被视为0;Hue 540被视为180。

除了标准的HSV模型之外,Qt还提供了一个alpha通道来实现alpha混合绘图。

七、HSL颜色模型

HSL类似于HSV,但是代替Value参数,HSL指定了一个亮度参数,该参数映射到颜色的亮度有些不同。
同样,对于同一种颜色,HSL的饱和度值通常与HSV的饱和度值不相同。hslSaturation()提供颜色的HSL饱和度值,而saturation()和hsvSaturation()提供HSV饱和度值。
色调值在HSL和HSV中被定义为相同的。

八、CMYK颜色模型

虽然RGB和HSV颜色模型用于计算机显示器上的显示,但CMYK模型用于印刷机和一些硬拷贝设备的四色印刷过程。
CMYK有四个成分,都在0-255的范围内:青色©,品红(M),黄色(Y)和黑色(K)。青色,品红和黄色被称为减色;CMYK颜色模型通过从白色表面开始,然后通过应用适当的组成值减去颜色来创建颜色。青色、品红和黄色的组合可以得到黑色,而减去一种或多种则可以得到其他颜色。当以不同的百分比组合时,这三种颜色可以创造出整个颜色光谱。
将100%的青色、品红和黄色混合确实会产生黑色,但结果并不令人满意,因为它浪费油墨,增加干燥时间,并且在印刷时呈现浑浊的颜色。因此,在专业印刷中添加黑色以提供纯黑色色调;因此有了“四色处理”这个术语。
除了标准的CMYK模型之外,Qt还提供了一个alpha通道来实现alpha混合绘图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法练习Day25】 重新安排行程N 皇后 解数独

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 重新安排行程N 皇后解数独总…

图论05-【无权无向】-图的广度优先BFS遍历-路径问题/检测环/二分图/最短路径问题

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 联通分量5. 环检测5.1 思路5.2 主要代码 6. 二分图检测6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 判断相邻两点的颜色是否一致 7. 最短路径问题7.1 思路7.2 代码 1. 代码…

使用 Visual Studio Code (VS Code) 作为 Visual C++ 6.0 (VC6) 的编辑器

使用 Visual Studio Code (VS Code) 作为 Visual C 6.0 (VC6) 的编辑器 由于一些众所周知的原因,我们不得不使用经典(过时)的比我们年龄还大的已有 25 年历史的 VC 6.0 来学习 C 语言。而对于现在来说,这个经典的 IDE 过于简陋&a…

python:红狐优化算法(Red fox optimization,RFO)求解23个基本函数

一、红狐优化算法 红狐优化算法(Red fox optimization,RFO)由Dawid Połap和 Marcin Woźniak于2021年提出,该算法模拟了红狐的狩猎行为,具有收敛速度快,寻优精度高等优势。 参考文献: Poap D …

华为OD技术面试-最短距离矩阵(动态规划、广度优先)

背景 记录2023-10-21 晚华为OD三面的手撕代码题,当时没做出来,给面试官说了我的想法,评价:解法复杂了,只是简单的动态规范 或 广度优先算法,事后找资料记录实现方式。 题目 腐烂的橘子 问题描述&#xff…

【项目实战】从零开始设计并实现一个接口异常链路分析器

这不是马上要到1024了吗,这不得弄个什么工具给部门项目提提效😯? 1. 背景 在我们服务端应用当中,我们往往会要求更高的性能和更高的稳定性,但实际开发的过程中,可能会出现很多赶时间的情况(也…

RustDay06------Exercise[91-100]

91.将指针还原成指定类型 因为指针不知道里面具体有什么,所以一般约定打上unsafe 申明开发者自己对该部分可用性负责,且在调试的时候也能起强调作用 // tests6.rs // // In this example we take a shallow dive into the Rust standard librarys // unsafe functions. Fix …

大疆智图(PC):新一代高效率高精度摄影测量软件

大疆智图是一款以二维正射影像与三维模型重建为主的软件,同时提供二维多光谱重建、激光雷达点云处理、精细化巡检等功能。它能够将无人机采集的数据可视化,实时生成高精度、高质量三维模型,满足事故现场、工程监测、电力巡线等场景的展示与精…

42914-2023 铝合金产品断裂韧度试验方法

1 范围 本文件描述了铝合金产品断裂韧度的试验方法。 本文件适用于铝合金轧制板材、挤压棒材、挤压板材、挤压管材、挤压型材和锻件产品的平面应变断 裂韧度和平面应力断裂韧度的测定。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款…

Bootstrap的卡片组件相关知识

Bootstrap的卡片组件 01-卡片介绍及常用场合 Bootstrap的卡片组件(Card)是一种常用的UI元素,或者也可称为一种常用的结构,用于呈现信息和内容,通常在网页和应用程序中用于以下情况: 博客文章和新闻文章&a…

Linux自有服务与软件包管理

服务是一些特定的进程,自有服务就是系统开机后就自动运行的一些进程,一旦客户发出请求,这些进程就自动为他们提供服务,windows系统中,把这些自动运行的进程,称为"服务" 举例:当我们使…

经管博士科研基础【27】如何判断正定矩阵或者负定矩阵?

在【26】一章中,我们学习到可以通过判断海塞矩阵是正定矩阵或负定矩阵来判断函数的极值问题,为此,我们今天就回顾一下怎么判断海塞矩阵或者说任意一个矩阵是一个正定矩阵或者负定矩阵。 一、正定矩阵的定义 其实,我们可以看到上面的任意非零向量x可以更换为“单位向量”。…

多继承的实例介绍

一、多继承同名覆盖 子类中的成员与父类中的成员同名问题&#xff0c;通过作用域分辨符&#xff08;&#xff1a;&#xff1a;&#xff09;进行限定类的访问&#xff0c;从而实现对不同类中的同名成员各自赋值。 #include<iostream> using namespace std; class A{//父…

一起学数据结构(10)——排序

从本文开始&#xff0c;通过若干篇文章展开对于数据结构中——排序的介绍。 1. 排序的概念&#xff1a; 将一堆杂乱无章的数据&#xff0c;通过一定的规律顺序排列起来。即将一个无序序列排列成一个有序序&#xff08;由小到大或者由大到小&#xff09;的运算。 在数据的排序中…

小微企业需要认定吗?怎么认定?

小微企业在方便人民群众生活&#xff0c;解决就业&#xff0c;活跃市场经济方面发挥了巨大作用。我国对小微企业也有相应的划分标准和税收优惠政策&#xff0c;那么小微企业需要认定吗&#xff1f;认定小微企业需要哪些资料&#xff1f;下面玖邀开业小编给大家做一个简单说明。…

BUUCTF N种方法解决 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压得到一个.exe文件 密文&#xff1a; 解题思路&#xff1a; 1、双击.exe文件&#xff0c;出现一个错误&#xff0c;切换其他的方法。 2、将KEY.exe文件放到010 Editor&#xff0c;分析这个…

Delphi : 在 SDK 管理器中添加其他 iOS 框架

在用Delphi开发IOS程序时&#xff0c;有时候需要添加其他的iOS框架&#xff0c;也就是说在默认的SDK中没有包含的iOS框架&#xff08;frameworks&#xff09;。 如果您希望利用 Delphi 提供支持之外的 iOS 框架&#xff0c;则需要在 SDK 管理器中添加框架的路径。 为此&#…

使用Python打造微信高效自动化操作教程

引言 在如今数字化时代&#xff0c;人们对于效率的追求越来越强烈&#xff0c;尤其是在工作和学习中。自动化操作成为了提高生产力的有效途径之一&#xff0c;而PyAutoGUI和Pyperclip作为Python中的两个强大库&#xff0c;为我们实现自动化操作提供了便利。本文将向大家介绍如…

抖音热搜榜:探索热门话题的奥秘

抖音热搜榜是抖音平台根据用户观看、点赞、评论、分享等行为数据&#xff0c;综合计算得出的热门话题排行榜。它反映了当前平台上最热门、最受欢迎的话题和内容。抖音热搜榜有以下几个作用和意义&#xff1a; 1. 满足用户需求&#xff1a;抖音热搜榜为用户提供了丰富的热门话题…

前端如何直接上传文件夹

前面写了一篇仿写el-upload组件&#xff0c;彻底搞懂文件上传&#xff0c;实现了选择/拖拽文件上传&#xff0c;我们经常看到一些网站支持直接选择整个文件夹上传&#xff0c;例如&#xff1a;宝塔面板、cloudflare托管、对象存储网站等等需要模拟文件路径存储文件的场景。那是…