QPalette调色板类
Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。QPalette是Qt专门用于调色的类,是管理所有部件的颜色的信息,比如按钮、标签等部件的颜色都是由QPalette管理,就相当于调色板,在板子上选择一种颜色然后刷一刷,而且所以部件都包含了一个调色板类的对象,使用函数返回QPalette类的对象,要使用的时候,直接获取然后进行相应的颜色设置。
此文章都是代码实现布局,没有使用ui界面添加部件布局。
QPalette简单讲解
获取部件(对象)的调色板、以及QPalette使用方法
每个部件(包括继承自Qt中的类的新建类对象)都包含着一个调色板对象,调用palette()函数可以返回部件的调色板对象
QPalette的使用:
1、调用函数palette()获取部件(对象)的调色板
2、调用setColor()函数,将获取的调色板进行属性设置和填充的颜色
3、部件(对象)调用setPalette()传入设置好的调色板参数进行颜色设置
4、部件(对象)调用update()颜色设置后刷新
注意第2点,其第一个参数是对部件的什么属性进行调色,有窗体颜色、窗体文本颜色、按钮颜色、按钮文本颜色、背景颜色等。
参数对应的属性:
QPalette::Window——窗体颜色(类对象窗体,边框窗体(QFrame))
QPalette::WindowText——窗体文本颜色(QLabel显示的文本)
QPalette::Button——按钮颜色(QPushButton对象的颜色)
QPalette::ButtonText——按钮文本颜色(QPushButton显示的文本颜色)
QPalette::Base——背景颜色(QTextEdit父文本的背景颜色)
小知识
发现一个有趣的知识点,就文章而言,在下文实现QPalette设置背景颜色的示例中体现,因为通过QPalette设置背景颜色的对象是QTextEdit,QTextEdit直接通过setColor(QPalette::Base,参数2)进行调色板对象设置颜色,那么QTextEdit的背景颜色自然设置了。但是没有上一次步骤(即调用setColor()),那么也可以通过设置QTextEdit所在的父窗体、或者被加入布局管理的父窗体,QPalette通过对其父窗体进行调色板设置——设置父窗体或者其所在的窗体上的对象设置setColor(QPalette::Base,参数2),那么QTextEdit的背景颜色也会被设置。其他类型通过QPalette设置的也是一样,通过QPalette设置在部件(对象)所在的窗体进行设置,其效果一样,对部件所在的父窗体设置setColor(QPalette::参数,参数2),其也会作用到对应的类型颜色的设置,但是,指定对对象的Palette(调色板对象进行设置),其后面设置的效果会覆盖父窗体所设置的。
以下文QPalette设置窗体文本颜色板块示例,设置窗体颜色示例,其它类型的颜色设置用法一致
详细了解可以去Qt帮助文档查阅。
QPalette设置窗体颜色
如下:
新建类,class HelloTo : public QDialog
setWindowTitle("QPalette设置窗体颜色");
resize(QSize(500,300));
QPalette p=this->palette();
QColor color=Qt::red;
p.setColor(QPalette::Window,color);
this->setPalette(p);
this->update();
效果如下:
QPalette设置窗体文本颜色
定义两个Label标签,label1标签文本颜色的设置是通过父窗体(部件所在的窗体)进行,label2是直接调用label2的调色板对象设置。
QLabel label1=new QLabel("标签一!");
QLabel label2=new QLabel("标签二!");
QGridLayout *mainLayout=new QGridLayout(this);
mainLayout->addWidget(label1,0,0);
mainLayout->addWidget(label2,1,0);
QPalette p=this->palette();
QColor color=Qt::blue;
p.setColor(QPalette::WindowText,color);
this->setPalette(p);
this->update();
QPalette p1=label2->palette();
QColor color1=Qt::red;
p1.setColor(QPalette::WindowText,color1);
label2->setPalette(p1);
label2->update();
QPalette项目示例
项目的功能,点击其中一个按钮,可以选择颜色,选择颜色后,其所受的QPalette设置的部件改变调色板颜色,将其显示
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
void fillColorList(QComboBox *comboBox);
public slots:
void ShowWindowText(int index);
private:
QLabel *m_windowTextLabel;
QComboBox *m_windowTextComboBox;
QLabel *m_label1;
QLabel *m_label2;
};
函数实现
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
m_windowTextLabel=new QLabel("设置窗体文本颜色 QPalette::WindowText:");
m_windowTextComboBox=new QComboBox;
m_label1=new QLabel("请选择一个值");
m_label2=new QLabel("请输入字符串");
//获取颜色名称,颜色的名称是字符串,有很多,用字符串链表保存
//QColor类的colorNames()方法获取所有的颜色名称
QStringList colorList=QColor::colorNames();
//循环将颜色按顺序填充到组合框中
QString color;
foreach(color,colorList){
//QPixmap绘制大小70,20的图形
QPixmap pix(QSize(70,20));
//QPixmap图形填充的颜色
pix.fill(QColor(color));
//用绘制图形设置组合框的每一项图标,一项一项添加元素
m_windowTextComboBox->addItem(QIcon(pix),NULL);
//设置图标大小
m_windowTextComboBox->setIconSize(QSize(70,20));
//设置尺寸策略,QComboBox::AdjustToContents是根据内容自动适应大小
m_windowTextComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
}
connect(m_windowTextComboBox,SIGNAL(activated(int)),this,SLOT(ShowWindowText(int)));
QGridLayout *mainLayout=new QGridLayout(this);
mainLayout->setSpacing(20);
mainLayout->addWidget(m_windowTextLabel,0,0);
mainLayout->addWidget(m_windowTextComboBox,0,1);
mainLayout->addWidget(m_label1,0,2);
mainLayout->addWidget(m_label2,1,2);
}
void Dialog::ShowWindowText(int index)
{
QStringList colorlist=QColor::colorNames();
QColor color=QColor(colorlist[index]);
QPalette p=this->palette();
p.setColor(QPalette::WindowText,color);
this->setPalette(p);
this->update();
}
效果展示:
1
2
3
此文章使用到了组合框QComboBox,其还有很多用法,会在其他文章做介绍。