QColor方法功能(QT5.12)

本文深入探讨了Qt中颜色管理的方法,包括如何创建不同颜色模型的颜色对象,如何获取和设置颜色的各种属性,以及如何在不同的颜色空间之间进行转换。

//for starf study

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include<QDebug>

#include<QRgba64>


#include "mainwindow.h"
#include "ui_mainwindow.h"

#include<QDebug>

#include<QColor>
#include<QRgba64>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QColor crA = QColor(255,0,0,125); //用RGBA参数精准创建颜色对象 a代表颜色透明度 范围是 0-255
    QColor crB = QColor(Qt::darkGreen); //使用系统自带的一些颜色可以快速初始化一个颜色对象
    QColor crC = QColor(0xff0000ff); //通过ARGB数值精准创建一个颜色
    QRgba64 cl = QRgba64();
    cl.setRed(65535);
    cl.setGreen(00);
    cl.setBlue(00);
    cl.setAlpha(65535);
    QColor crD = QColor(cl); //用QRgba64类型创建一个更加精细的颜色
    //其他参数的构造函数一般不使用
    qDebug()<<crD.alpha()<<crD.alphaF();  //获取颜色的alpha分量
    qDebug()<<crD.black()<<crD.blackF();  //获取颜色的黑色分量
    qDebug()<<crD.blue()<<crD.blueF();  //获取颜色的蓝色分量
    qDebug()<<crD.cyan()<<crD.cyanF(); //获取颜色的青色分量
    qDebug()<<crD.green()<<crD.greenF(); //获取颜色的绿色分量
    qDebug()<<crD.red()<<crD.redF(); //获取颜色的红色分量
    qDebug()<<crD.yellow()<<crD.yellowF(); //获取颜色的红色分量
    qDebug()<<crD.hslHue()<<crD.hslHueF(); //获取颜色的色相分量(hsl)
    qDebug()<<crD.hslSaturation()<<crD.hslSaturationF(); //获取颜色的饱和度分量(hsl)
    qDebug()<<crD.hsvHue()<<crD.hsvHueF(); //获取颜色的色相分量(hsv)
    qDebug()<<crD.hsvSaturation()<<crD.hsvSaturationF(); //获取颜色的饱和度分量(hsv)
    qDebug()<<crD.value()<<crD.valueF(); //获取颜色的明度分量(hsv)
    qDebug()<<crD.hue()<<crD.hueF(); //同crD.hsvHue()  和  crD.hsvHueF()
    qDebug()<<crD.saturation()<<crD.saturationF(); //同crD.hsvSaturation()  和  crD.hsvSaturationF()
    qDebug()<<crD.lightness()<<crD.lightnessF(); //返回颜色的亮度分量
    qDebug()<<crD.magenta()<<crD.magentaF(); // 返回颜色的洋红分量(cmyk)

    QColor cpCr = crD.convertTo(QColor::Rgb); //以指定格式状态颜色的副本
                        //QColor::Rgb(1)   Rgb样式      一般网络图片样式
                        //QColor::Hsv  (2)  Hsv样式       色彩圆锥模型样式  HSV即色相(Hue)、饱和度(Saturation)、明度(Value)
                        //QColor::Cmyk (3) Cmyk样式    印刷体模式
                        //QColor::Hsl(4)    Hsl样式        HSL表示色相(Hue)、饱和度(Saturation)、亮度(Lightness)

    QColor Darkcr = crD.darker();  //将颜色调暗淡以后 返回新的颜色 不改变旧颜色
    QColor Lightcr = crD.lighter(); //将颜色调明亮以后 返回新的颜色 不改变旧颜色
    qDebug()<<crD<<Darkcr<<Lightcr;

    int c,m,y,k;
    crD.getCmyk(&c,&m,&y,&k); //将颜色转化为cmyk模式,然后获取四种颜色的配比
    qDebug()<<c<<m<<y<<k;      // void QColor::getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *a = nullptr) 可以获取更精确的值
    int h,s,l;
    crD.getHsl(&h,&s,&l); //将颜色转化为hsl模式,然后获取三种属性的值
                                      //void QColor::getHslF(qreal *h, qreal *s, qreal *l, qreal *a = nullptr) const 可以获取更加精确的值
    int v;
    crD.getHsv(&h,&s,&v); //将颜色转化为hsv模式,然后获取三种属性的值
                                        //void QColor::getHslF(qreal *h, qreal *s, qreal *v qreal *a = nullptr) const 可以获取更加精确的值
    int r,g,b,a;
    crD.getRgb(&r,&g,&b,&a); //将颜色转化为rgba格式,然后获取三种颜色的值和alpha的值,a可以不写
                                             //void QColor::getRgbF(qreal *r, qreal *g, qreal *b, qreal *a = nullptr) const 可以获取更精确的值

    qDebug()<<crD.isValid(); //返回颜色是否有效
    qDebug()<<crD.isValidColor("red");  //如果名称是可以被识别的有效的颜色字符串,则返回true
                                                            //如果返回true 那么这个字符串名称就可以作为QColor的参数构造一个颜色对象
                                                            //如,此时返回true,则可以:QColor crE = QColor("red");
    qDebug()<<crD.name(); //以“#RRGGBB”格式返回颜色的名称;
        //可以填写参数,填写:
        //QColor::HexRgb  QColor::HexArgb,后者的返回格式中 以#AARRGGBB 返回颜色名称

    qDebug()<<crD.rgb();  //返回颜色的argb值  格式为#AARRGGBB的ARGB四元组   uint32
    QRgba64 rv = crD.rgba64();       //返回颜色QRgba64的对象
    qDebug()<<crD.rgba();  //返回颜色的rgba值

    crD.setAlpha(255); //设置RGB色彩的Alpha值 0-255
    crD.setAlphaF(0.55); //设置RGB色彩的Alpha值  0-1
    crD.setBlue(125);  //设置RGB色彩的蓝色值 0-255
    crD.setBlueF(0.51); //设置RGB色彩的蓝色值 0-1
    crD.setGreen(125);  //设置RGB色彩的绿色值 0-255
    crD.setGreenF(0.51); //设置RGB色彩的绿色值 0-1
    crD.setRed(125);  //设置RGB色彩的红色值 0-255
    crD.setRedF(0.51); //设置RGB色彩的红色值 0-1
    crD.setCmyk(100,12,23,43); //设置CMYK模式下的四个颜色值 范围都是0-255
    crD.setCmykF(0.1,0.2,0.4,0.13); //设置CMYK模式下的四个颜色值 范围都是0-1
    crD.setHsl(100,12,23); //设置Hsl模式下的3个属性值 范围都是0-255
    crD.setHslF(0.1,0.2,0.4); //设置Hsl模式下的3个属性值 范围都是0-1
    crD.setHsv(100,12,23); //设置Hsv模式下的3个属性值 范围都是0-255
    crD.setHsvF(0.1,0.2,0.4); //设置Hsv模式下的3个属性值 范围都是0-1
    crD.setRgb(100,12,23); //设置RGB模式下的3个颜色值 范围都是0-255
    crD.setRgbF(0.1,0.2,0.4); //设置rgb模式下的3个颜色值 范围都是0-1
    crD.setRgba64(cl); //将颜色的Rgba64值设定为指定值
    crD.setRgba(0xff0000ff); //将颜色的Rgba值设定为指定值


    qDebug()<<crD.spec(); //返回当前颜色的类型  类型参照convertTo 的参数
    QColor crF = crD.toCmyk(); //返回crD颜色的CMYK模式色彩
    QColor crG = crD.toHsl(); //返回crD颜色的HSL模式色彩
    QColor crH = crD.toHsv(); //返回crD颜色的HSV模式色彩
    QColor crI = crH.toHsv(); //返回crH颜色的rgb模式色彩
}

MainWindow::~MainWindow()
{
    delete ui;
}


### 实现交替背景颜色的方法Qt 中,可以通过设置 `QTableView` 或 `QTreeView` 的样式表来实现交替背景颜色的效果。以下是具体方法: #### 使用 QSS (Qt Style Sheets) 可以利用 Qt 提供的样式表功能,在 `.qss` 文件或者程序中通过字符串定义样式表的方式设置交替行的颜色。 ```cpp tableView->setStyleSheet("alternate-background-color: #f0f0f0; background-color: #ffffff;"); ``` 此代码设置了表格视图中的交替行背景颜色以及默认行背景颜色[^1]。 如果希望更灵活地控制样式,可以在应用程序启动时加载全局样式表文件: ```cpp QString styleSheet = "QTableView {" " alternate-background-color: #f0f0f0;" " background-color: #ffffff;" "}"; qApp->setStyleSheet(styleSheet); ``` 以上代码会应用到整个应用程序中的所有 `QTableView` 控件[^2]。 #### 启用交替行颜色显示 除了设置样式外,还需要确保启用了交替行颜色的功能: ```cpp tableView->setAlternatingRowColors(true); ``` 该函数启用或禁用交替行颜色的支持。只有当其被显式调用并传递参数为 true 时,才会生效[^3]。 #### 自定义绘制单元格背景 对于更加复杂的场景,可能需要自定义绘制逻辑。这通常涉及重新实现 `QStyledItemDelegate::paint()` 方法,并手动处理不同行号对应的背景颜色变化。 ```cpp class AlternateColorDelegate : public QStyledItemDelegate { public: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override { if (option.state & QStyle::State_Selected) { painter->fillRect(option.rect, option.palette.highlight()); } else { QColor backgroundColor; if (index.row() % 2 == 0) backgroundColor = Qt::white; else backgroundColor = Qt::lightGray; painter->fillRect(option.rect, backgroundColor); QStyledItemDelegate::paint(painter, option, index); } } }; ``` 创建委托实例后将其分配给目标视图控件即可完成定制化需求[^4]。 ```cpp AlternateColorDelegate* delegate = new AlternateColorDelegate(tableView); tableView->setItemDelegate(delegate); ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值