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.Rgb1
QColor.Hsv2
QColor.Cmyk3
QColor.Invalid0

当我们在某种模式的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)
  1. 绿
    • 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)
  2. 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模式.

  1. 色调
    • int hue (self)
    • float hueF (self)
  2. 饱和度
    • int saturation (self)
    • float saturationF (self)
  3. 明度
    • int value (self)
    • float valueF (self)
  4. 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)
  1. 品红
    • int magenta (self)
    • float magentaF (self)
    • int yellow (self)
    • float yellowF (self)
    • int black (self)
    • float blackF (self)
  2. 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.white3
Qt.black2
Qt.red7
Qt.darkRed13
Qt.green8
Qt.darkGreen14
Qt.blue9
Qt.darkBlue15
Qt.cyan10
Qt.darkCyan16
Qt.magenta11
Qt.darkMagenta17
Qt.yellow12
Qt.darkYellow18
Qt.gray5
Qt.darkGray4
Qt.lightGray6
Qt.transparent19
Qt.color00
Qt.color11

它们的实际效果如下:

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 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ljhandlwt/article/details/52294949?utm_source=copy

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值