QPalette调色板

  • Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。

实现通过选择调色板中的颜色,来改变部件的颜色
在这里插入图片描述

新建桌面应用程序testQPalette,类名Dialog,基类QDialog,窗口左侧为控制区,右侧为调色板效果区。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QFrame>
#include <QLabel>
#include <QComboBox>
#include <QTextEdit>

class Dialog : public QDialog{
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

    void createCtrlFrame();     //初始化组合框区域
    void createContentFrame();  //初始化按钮区域
   
    void fillColorList(QComboBox *comboBox); //组合框中添加颜色下拉项

private slots:
    void onShowWindow(int index);    //更新窗口颜色
    void onShowWindowText(int index);//更新窗口文字颜色
    void onShowButton(int index);    //更新按钮颜色
    void onShowButtonText(int index);//更新按钮文字颜色
    void onShowBase(int index);      //更新背景颜色
private:
    QFrame *m_ctrlFrame;             //左侧组合框区域
    QLabel *m_windowLabel;           //窗口标签
    QComboBox *m_windowComboBox;     //设置窗体颜色下拉组合框
    QLabel *m_windowTextLabel;       //窗体文本标签
    QComboBox *m_windowTextComboBox; //设置窗体颜色文本下拉组合框
    QLabel *m_buttonLabel;           //按钮标签
    QComboBox *m_buttonComboBox;     //设置按钮颜色下拉组合框
    QLabel *m_buttonTextLabel;       //按钮文本标签
    QComboBox *m_buttonTextComboBox; //设置按钮颜色文本下拉组合框
    QLabel *m_baseLabel;             //背景色文本标签
    QComboBox *m_baseComboBox;       //设置背景颜色下拉组合框

    QFrame *m_contentFrame;          //右侧效果显示区域
    QLabel *m_label1;                //输入标签1
    QLabel *m_label2;                //输入标签2
    QComboBox *m_labelComboBox;      //标签颜色下拉组合框
    QLineEdit *m_lineEidt;           //行编辑器
    QTextEdit *m_textEdit;           //文本编辑器
    QPushButton *m_okBtn;            //确定按钮
    QPushButton *m_cancelBtn;        //取消按钮
};
#endif // DIALOG_H

 
dialog.cpp

#include "dialog.h"

#include <QGridLayout>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>


#define COLOR_COMBOBOX_HEIGHT   20
#define COLOR_COMBOBOX_WIDTH    70

Dialog::Dialog(QWidget *parent) : QDialog(parent){
    setWindowTitle("QPalette");				
    setWindowFlags(Qt::WindowCloseButtonHint);

    createCtrlFrame();		//初始化左侧组合框区域
    createContentFrame();	//初始化右侧显示效果区域

    QHBoxLayout *myLayout = new QHBoxLayout(this);
    myLayout->addWidget(m_ctrlFrame);
    myLayout->addWidget(m_contentFrame);
}

Dialog::~Dialog(){}

void Dialog::createCtrlFrame(){
    m_ctrlFrame = new QFrame;
    m_ctrlFrame->setFrameStyle(QFrame::Sunken | QFrame::Box);   //设置边框下沉/箱子效果

    //WindowColor
    m_windowLabel = new QLabel("QPalette::Window:");
    m_windowComboBox = new QComboBox;
    fillColorList(m_windowComboBox);
    connect(m_windowComboBox, SIGNAL(activated(int)), this, SLOT(onShowWindow(int)));

    //WindowTextColor
    m_windowTextLabel = new QLabel("QPalette::WindowText:");
    m_windowTextComboBox = new QComboBox;
    fillColorList(m_windowTextComboBox);
    connect(m_windowTextComboBox, SIGNAL(activated(int)), this, SLOT(onShowWindowText(int)));

    //BUttonColor
    m_buttonLabel = new QLabel("QPalette::Button:");
    m_buttonComboBox = new QComboBox;
    fillColorList(m_buttonComboBox);
    connect(m_buttonComboBox, SIGNAL(activated(int)), this, SLOT(onShowButton(int)));

    //BUttonTextColor
    m_buttonTextLabel = new QLabel("QPalette::ButtonText:");
    m_buttonTextComboBox = new QComboBox;
    fillColorList(m_buttonTextComboBox);
    connect(m_buttonTextComboBox, SIGNAL(activated(int)), this, SLOT(onShowButtonText(int)));

    //baseColor
    m_baseLabel = new QLabel("QPalette::Base:");
    m_baseComboBox = new QComboBox;
    fillColorList(m_baseComboBox);
    connect(m_baseComboBox, SIGNAL(activated(int)), this, SLOT(onShowBase(int)));

    QGridLayout *mainLayout = new QGridLayout(m_ctrlFrame);
    mainLayout->setSpacing(20);
    mainLayout->addWidget(m_windowLabel, 0, 0);
    mainLayout->addWidget(m_windowComboBox, 0, 1);
    mainLayout->addWidget(m_windowTextLabel, 1, 0);
    mainLayout->addWidget(m_windowTextComboBox, 1, 1);
    mainLayout->addWidget(m_buttonLabel, 2, 0);
    mainLayout->addWidget(m_buttonComboBox, 2, 1);
    mainLayout->addWidget(m_buttonTextLabel, 3, 0);
    mainLayout->addWidget(m_buttonTextComboBox, 3, 1);
    mainLayout->addWidget(m_baseLabel, 4, 0);
    mainLayout->addWidget(m_baseComboBox, 4, 1);

}

void Dialog::createContentFrame(){
    m_contentFrame = new QFrame;
    m_contentFrame->setAutoFillBackground(true);    //自动填充背景

    m_label1 = new QLabel("请输入一个值");
    m_label2 = new QLabel("请输入字符串");
    m_labelComboBox = new QComboBox;
    m_lineEidt = new QLineEdit;
    m_textEdit = new QTextEdit;

    m_okBtn = new QPushButton("确定");
    m_cancelBtn= new QPushButton("取消");
    m_okBtn->setAutoFillBackground(true);

    QGridLayout *TopLayout = new QGridLayout;
    TopLayout->addWidget(m_label1, 0,0);
    TopLayout->addWidget(m_labelComboBox, 0,1);
    TopLayout->addWidget(m_label2, 1,0);
    TopLayout->addWidget(m_lineEidt, 1,1);
    TopLayout->addWidget(m_textEdit, 2,0, 1,2);

    QHBoxLayout *bottomLayout = new QHBoxLayout;
    bottomLayout->addWidget(m_okBtn);
    bottomLayout->addWidget(m_cancelBtn);

    QVBoxLayout *mainLayou = new QVBoxLayout(m_contentFrame);
    mainLayou->addLayout(TopLayout);
    mainLayou->addLayout(bottomLayout);
}

void Dialog::fillColorList(QComboBox *comboBox){
    QStringList colorList = QColor::colorNames();  					//获取所有颜色
    QString color;
    foreach(color, colorList){
        QPixmap pix(QSize(COLOR_COMBOBOX_WIDTH, COLOR_COMBOBOX_HEIGHT));
        pix.fill(QColor(color));            						//填充颜色
        comboBox->addItem(QIcon(pix), NULL);						//下拉组合框中添加项颜色图标
        comboBox->setIconSize(pix.size());  						//设置下拉框中项的尺寸
        comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); //根据图片内容适应尺寸策略   
    }
}

void Dialog::onShowWindow(int index){
    QStringList colorList = QColor::colorNames();   //获取颜色链表
    QColor color = QColor(colorList.at(index));     //获取选择的颜色值
    QPalette palette = m_contentFrame->palette();   //获取调色板
    palette.setColor(QPalette::Window, color);      //设置窗体颜色
    m_contentFrame->setPalette(palette);            //设置画家
    m_contentFrame->update();                       //刷新窗体重绘
}

void Dialog::onShowWindowText(int index){
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList.at(index));
    QPalette palette = m_contentFrame->palette();
    palette.setColor(QPalette::WindowText, color);  //设置窗体文字颜色
    m_contentFrame->setPalette(palette);
    m_contentFrame->update();
}

void Dialog::onShowButton(int index){
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList.at(index));
    QPalette palette = m_contentFrame->palette();
    palette.setColor(QPalette::Button, color);      //设置按钮颜色
    m_contentFrame->setPalette(palette);
    m_contentFrame->update();
}

void Dialog::onShowButtonText(int index){
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList.at(index));
    QPalette palette = m_contentFrame->palette();
    palette.setColor(QPalette::ButtonText, color);  //设置按钮文字颜色
    m_contentFrame->setPalette(palette);
    m_contentFrame->update();
}

void Dialog::onShowBase(int index){
    QStringList colorList = QColor::colorNames();
    QColor color = QColor(colorList.at(index));
    QPalette palette = m_contentFrame->palette();
    palette.setColor(QPalette::Base, color);        //设置背景颜色
    m_contentFrame->setPalette(palette);
    m_contentFrame->update();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值