Qt调色板QPalette

注意:不要把QPalette与 Qt 样式表联合使用

在实际的应用中,经常需要对某个控件的颜色外观,如背景、前景色等,进行设置。

Qt中提供的调色板QPalette类就是专门用于管理控件的外观显示。QPalette类相当于对话框或控件的调色板,管理着控件和窗体的所有颜色

每个窗体和控件都包含一个QPalette对象,在显示时,对其做相应的设置即可 

QWidget 会把调色板角色从父级传播到子级,除非启用了 Qt::WA_WindowPropagation 属性(使用 QWidget::setAttribute()函数设置) ,否则默认情况下调色板不会传播到窗口

因某些样式依赖于第三方 API(比如 Mac 样式、windows vista 样式等),而这些样式并不一定遵循调色板,因此不能保证部件的调色板分配角色会改变部件的外观。此时可使用样式表 还可以使用 QApplication::setPalette();静态函数设置整个应用程序的默认调色板

QPalette有两个基本的概念:一个是ColorGroup;一个是ColorRole

ColorGroup有三种不同的状态:

  QPalette::Active=0     激活状态(具有键盘焦点的窗口)   QPalette::Disabled=1     被禁用的部件(而不是窗口)   QPalette::Inactive=2        未激活状态(非活动)

QPalette::Normal            同 Active

ColorRole:

Qt调色板QPalette_第1张图片 

实例一

QLabel* label=new QLabel("标签",this);
    label->move(10,10);
    label->resize(300,200);
    label->setAutoFillBackground(true); //是否自动填充控件的背景
    //如果启用,此属性将导致Qt在调用paint事件之前填充小部件的背景。使用的颜色由小部件的调色板QPalette来决定
    QPalette palette ;  //创建调色板对象
    palette=label->palette();  //返回控件的调色板
    palette.setColor(QPalette::Window, Qt::yellow);  //设置颜色
    //参数1:ColorRole枚举值   决定设置哪个地方的颜色
    //参数2:要设置的颜色

    palette.setColor(QPalette::WindowText, Qt::blue);

    label->setPalette(palette);  //控件使用调色板
    //如果setAutoFillBackground为true,控件的背景色马上发生变化
    //前景色不受setAutoFillBackground的影响

实例二

QLabel* label=new QLabel("标签",this);
    label->move(10,10);
    label->resize(300,200);
    label->setAutoFillBackground(true); 
    QPalette palette ;  
    palette=label->palette();  

    QPixmap p;
    p.load("./tu.jpg");
    palette.setBrush(QPalette::Window,p);  //给控件设置背景图


    palette.setColor(QPalette::WindowText, Qt::blue);

    label->setPalette(palette);

实例三

#include "win.h"

Win::Win(QWidget *parent)
    : QWidget(parent)
{
    this->resize(400,300);

    QPushButton *pb1=new QPushButton("AAA",this);
    pb1->move(22,22);
    QPushButton *pb2=new QPushButton("BBB",this);
    pb2->move(111,22);
    QLabel *pl=new QLabel("CCC",this);
    pl->move(22,55);
    QLineEdit *pe=new QLineEdit("DDD",this);
    pe->move(99,55);
    QComboBox *px=new QComboBox(this);
    px->move(266,55);
    px->addItem("EEE"); px->addItem("FFF");
    QPlainTextEdit *pt=new QPlainTextEdit("GGGGG",this);
    pt->move(22,88);

    //设置调色板各颜色角色的颜色
    QPalette p;
    p.setColor(QPalette::Window,QColor(111,1,1)); //①、背景色
    p.setColor(QPalette::WindowText,QColor(1,111,1)); //②、前景色
    p.setColor(QPalette::Base,QColor(111,111,1)); //③、文字输入部件背景色
    p.setColor(QPalette::Text,QColor(111,1,111)); //④、基于 Base 的前景色
    p.setColor(QPalette::Button,QColor(1,255,111)); //⑤、按钮背景色

    p.setColor(QPalette::ButtonText,QColor(255,255,0));//⑥、基于 Button 的前景色
    p.setColor(QPalette::Highlight,QColor(255,255,255)); //⑦、突出显示的颜色
    p.setColor(QPalette::HighlightedText,QColor(1,1,255)); //⑧、突出显示的文本颜色
    p.setColor(QPalette::Light,QColor(1,1,255));
    //以下颜色用于设置部件的 3D 效果。
     p.setColor(QPalette::Dark,QColor(255,1,255)); //⑨
     p.setColor(QPalette::Shadow,QColor(255,1,255));//⑩
     this->setPalette(p);

}

Win::~Win()
{
}

Qt调色板QPalette_第2张图片 

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

你可能感兴趣的:(QT开发,qt,c++,qt开发,qt教程,QPalette)