pyqt4文档阅读(9):QColor
QColor,是Qt里代表颜色的类,是许多更抽象数据结构和作图的基础.
属性:
Types
- enum Spec { Invalid, Rgb, Hsv, Cmyk }
Methods
- __init__ (self, Qt.GlobalColor color)
- __init__ (self, unsigned long rgb)
- __init__ (self, QVariant variant)
- __init__ (self)
- __init__ (self, int r, int g, int b, int a = 255)
- __init__ (self, QString aname)
- __init__ (self, QColor acolor)
- int alpha (self)
- float alphaF (self)
- int black (self)
- float blackF (self)
- int blue (self)
- float blueF (self)
- QColor convertTo (self, Spec colorSpec)
- int cyan (self)
- float cyanF (self)
- QColor dark (self, int f = 200)
- QColor darker (self, int f = 200)
- (int c, int m, int y, int k, int a) getCmyk (self)
- (float c, float m, float y, float k, float a) getCmykF (self)
- (int h, int s, int v, int a) getHsv (self)
- (float h, float s, float v, float a) getHsvF (self)
- (int r, int g, int b, int a) getRgb (self)
- (float r, float g, float b, float a) getRgbF (self)
- int green (self)
- float greenF (self)
- int hue (self)
- float hueF (self)
- bool isValid (self)
- QColor light (self, int f = 150)
- QColor lighter (self, int f = 150)
- int magenta (self)
- float magentaF (self)
- QString name (self)
- int red (self)
- float redF (self)
- unsigned long rgb (self)
- unsigned long rgba (self)
- int saturation (self)
- float saturationF (self)
- setAlpha (self, int alpha)
- setAlphaF (self, float alpha)
- setBlue (self, int blue)
- setBlueF (self, float blue)
- setCmyk (self, int c, int m, int y, int k, int a = 255)
- setCmykF (self, float c, float m, float y, float k, float a = 1)
- setGreen (self, int green)
- setGreenF (self, float green)
- setHsv (self, int h, int s, int v, int a = 255)
- setHsvF (self, float h, float s, float v, float a = 1)
- setNamedColor (self, QString name)
- setRed (self, int red)
- setRedF (self, float red)
- setRgb (self, int r, int g, int b, int a = 255)
- setRgb (self, unsigned long rgb)
- setRgba (self, unsigned long rgba)
- setRgbF (self, float r, float g, float b, float a = 1)
- Spec spec (self)
- QColor toCmyk (self)
- QColor toHsv (self)
- QColor toRgb (self)
- int value (self)
- float valueF (self)
- int yellow (self)
- float yellowF (self)
Static Methods
- QStringList colorNames ()
- QColor fromCmyk (int c, int m, int y, int k, int a = 255)
- QColor fromCmykF (float c, float m, float y, float k, float a = 1)
- QColor fromHsv (int h, int s, int v, int a = 255)
- QColor fromHsvF (float h, float s, float v, float a = 1)
- QColor fromRgb (unsigned long rgb)
- QColor fromRgb (int r, int g, int b, int a = 255)
- QColor fromRgba (unsigned long rgba)
- QColor fromRgbF (float r, float g, float b, float a = 1)
Special Methods
- bool __eq__ (self, QColor c)
- bool __ne__ (self, QColor c)
详细分析:
1.颜色模式
QColor支持三种模式的颜色,分别有RGB,HSV,CMYK.
同时QColor支持整数和浮点数设置,如果用浮点数设置的话,所有取值范围都是[0,1]
QColor在某一时刻只能以一种模式存在,QColor有一系列函数给我们用来获取和转换颜色模式.
- Spec spec (self)
- QColor convertTo (self, Spec colorSpec)
- QColor toCmyk (self)
- QColor toHsv (self)
- QColor toRgb (self)
Spec类型是我们颜色模式的枚举集:
枚举量 | 值 |
---|---|
QColor.Rgb | 1 |
QColor.Hsv | 2 |
QColor.Cmyk | 3 |
QColor.Invalid | 0 |
当我们在某种模式的QColor上更新另一种模式的属性时,这个QColor会先转换颜色模式,再更新它的数值,也就是说会自动变换颜色模式.
必须知道的是,当使用错误的参数设置的时候,是可能会产生非法的颜色的,此时它的模式就是Invalid.
我们可以通过下面函数去检查一个QColor是否合法:
- bool isValid (self)
2.RGB模式
RGB模式就是根据红绿蓝三原色进行叠加,是显示屏的基础颜色模式,在QColor里RGB模式的函数也是最多的.
R,G,B的取值范围都是[0,255],因此一个24位整数即可表达一个RGB颜色.
从RGB延伸出的有RGBA,它在红绿蓝的基础上加上透明度.
透明度A的取值范围也是[0,255],因此一个32位整数即可表达一个RGBA颜色.
- 红
- int red (self)
- float redF (self)
- setRed (self, int red)
- setRedF (self, float red)
- 绿
- int green (self)
- float greenF (self)
- setGreen (self, int green)
- setGreenF (self, float green)
- 蓝
- int blue (self)
- float blueF (self)
- setBlue (self, int blue)
- setBlueF (self, float blue)
- RGB
- (int r, int g, int b, int a) getRgb (self)
- (float r, float g, float b, float a) getRgbF (self)
- setRgb (self, int r, int g, int b, int a = 255)
- setRgbF (self, float r, float g, float b, float a = 1)
- unsigned long rgb (self)
- unsigned long rgba (self)
- setRgb (self, unsigned long rgb)
- setRgba (self, unsigned long rgba)
3.HSV模式
HSV模式的参数分别是Hue(色调),Saturation(饱和度),Value(明度).
H其实是一个圆的角度,它的取值范围是[0,360),而S和V则都是[0,255]
同样地,HSV也可以加上透明度变成HSVA模式.
- 色调
- int hue (self)
- float hueF (self)
- 饱和度
- int saturation (self)
- float saturationF (self)
- 明度
- int value (self)
- float valueF (self)
- HSV
- (int h, int s, int v, int a) getHsv (self)
- (float h, float s, float v, float a) getHsvF (self)
- setHsv (self, int h, int s, int v, int a = 255)
- setHsvF (self, float h, float s, float v, float a = 1)
4.CMYK模式
CMYK模式是印刷方面的重要颜色模型,它的参数包括cyan(青),magenta(品红),yellow(黄),key plate(黑).
事实上我们以前听说的印刷三原色只有青,品红和黄,至于黑,是因为用C,M,Y很难调出纯黑,并且印刷时用到黑色的地方很多.
因此加上黑色,一方面增大色域和品质,一方面减少其他三种色的颜料的消耗.
C,M,Y,K的取值范围都是[0,255],同样也可以加上透明度.
- 青
- int cyan (self)
- float cyanF (self)
- 品红
- int magenta (self)
- float magentaF (self)
- 黄
- int yellow (self)
- float yellowF (self)
- 黑
- int black (self)
- float blackF (self)
- CMYK
- (int c, int m, int y, int k, int a) getCmyk (self)
- (float c, float m, float y, float k, float a) getCmykF (self)
- setCmyk (self, int c, int m, int y, int k, int a = 255)
- setCmykF (self, float c, float m, float y, float k, float a = 1)
5.透明度
透明度可以单独设置:
- int alpha (self)
- float alphaF (self)
- setAlpha (self, int alpha)
- setAlphaF (self, float alpha)
6.初始化
QColor提供了多达7种的不同参数的初始化方式:
函数 | 参数解释 |
---|---|
__init__ (self) | RGB模式里的纯黑色 |
__init__ (self, int r, int g, int b, int a = 255) | RGB模式 |
__init__ (self, unsigned long rgb) | RGB模式 |
__init__ (self, Qt.GlobalColor color) | 预定义的颜色 |
__init__ (self, QColor acolor) | 通过其他QColor |
__init__ (self, QString aname) | 通过名字生成RGB模式颜色 |
__init__ (self, QVariant variant) | ? |
7.静态方法生成
从初始化函数可以看到,它只支持RGB模式的初始化.如果我们要生成HSV或者CMYK的,我们可以使用静态方法:
- QColor QColor.fromCmyk (int c, int m, int y, int k, int a = 255)
- QColor QColor.fromCmykF (float c, float m, float y, float k, float a = 1)
- QColor QColor.fromHsv (int h, int s, int v, int a = 255)
- QColor QColor.fromHsvF (float h, float s, float v, float a = 1)
- QColor QColor.fromRgb (unsigned long rgb)
- QColor QColor.fromRgb (int r, int g, int b, int a = 255)
- QColor QColor.fromRgba (unsigned long rgba)
- QColor QColor.fromRgbF (float r, float g, float b, float a = 1)
8.颜色名字
在初始化的时候,我们看到颜色能通过名字初始化的.
这个名字可以是RGB特有的用"#"+若干位16进制数表示的字符串,它有下面几种模式(一个字母代表一个16进制位):
- #RGB
- #RRGGBB
- #RRRGGGBBB
- #RRRRGGGGBBBB
越多的位能让颜色取值越精细,当然,36位和48位的RGB颜色要在浮点数表示里才能体现出其精度之高.
这个名字也可以是QColor提供的一个颜色表里的名字.
QColor有一个静态方法可以返回这个颜色表,颜色表里是一堆字符串,使用这些字符串可以初始化一个QColor.
- QStringList QColor.colorNames ()
除了初始化,下面的函数也能实现名字和颜色之间的转化,注意获取名字的时候只能得到#RRGGBB形式的.
- QString name (self)
- setNamedColor (self, QString name)
9.预定义颜色
Qt提供了一堆预定义的颜色,其中color0和color1是两个特殊的颜色,它们是bitmap方面用到.
枚举量 | 值 |
---|---|
Qt.white | 3 |
Qt.black | 2 |
Qt.red | 7 |
Qt.darkRed | 13 |
Qt.green | 8 |
Qt.darkGreen | 14 |
Qt.blue | 9 |
Qt.darkBlue | 15 |
Qt.cyan | 10 |
Qt.darkCyan | 16 |
Qt.magenta | 11 |
Qt.darkMagenta | 17 |
Qt.yellow | 12 |
Qt.darkYellow | 18 |
Qt.gray | 5 |
Qt.darkGray | 4 |
Qt.lightGray | 6 |
Qt.transparent | 19 |
Qt.color0 | 0 |
Qt.color1 | 1 |
它们的实际效果如下:
10.变亮变暗
QColor提供了两个有趣的函数,来实现颜色的变亮变暗.
函数的工作原理是把颜色转换成HSV模式,然后调整V(明度),再转换回来.
- QColor dark (self, int f = 200)
- QColor darker (self, int f = 200)
- QColor light (self, int f = 150)
- QColor lighter (self, int f = 150)
其中无er后缀和有er后缀的效果貌似一样,并且Qt里本身没有dark()和light()函数.
参数里的f是一个程度系数.
如lighter()函数,如果f<100,则颜色反而会变暗,如果f=150,颜色大概变亮50%.
对于darker()函数,如果f<100,则颜色反而会变亮,如果f=300,颜色会变成原来的1/3亮度.
注意,这些函数都不会改变自身,只是会返回一个更亮或更暗的颜色.
--------------------- 本文来自 ljhandlwt 的**** 博客 ,全文地址请点击:https://blog.****.net/ljhandlwt/article/details/52294949?utm_source=copy