调色板QPalette用法

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,其还有很多用法,会在其他文章做介绍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值