注意:不要把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:
实例一
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开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓