调色板 QPalette

1.ColorGroup有三种不同的状态:

Active:激活状态(获得焦点状态)
Disabled:禁用状态(未获得焦点状态)
Inactive:未激活状态(不可用状态)

2.ColorRole 为颜色主题,对窗体中不同部位颜色的分类

QPalete::Window,通常指窗口部件的背景色;(与background的区别在于:this可以用window或者background,但例如label只能用background)

QPalette:WindowText,通常指窗口不见的前景色;

QPalette::Base,指文本输入窗口部件(比如QtextEdit,QLinedit等)的背景色.

QPalette::Text,与QPalette::Base一块使用,指文本输入窗口部件的前景色;
QPalette::Button,指按钮窗口部件的背景色;

QPalette::ButtonText,指按钮上文字的颜色

常用的设置颜色方法如下
(1) void QPalette::setBrush ( ColorRole role, const QBrush & brush )
改变所有组下指定角色role的画刷颜色值。
(2) void QPalette::setBrush ( ColorGroup group, ColorRole role, const QBrush & brush )
改变指定组group下的指定角色role的画刷颜色值。
(3) void QPalette::setColor ( ColorRole role, const QColor & color )
改变所有组下指定角色role的颜色值。
(4) void QPalette::setColor ( ColorGroup group, ColorRole role, const QColor & color )
改变指定组group下指定角色role的颜色值。

#ifndef PALETTE_H
#define PALETTE_H

#include <QDialog>
#include <QLineEdit>
#include <QProgressBar>
#include <QLabel>
#include <QComboBox>
#include <QPushButton>
#include <QGridLayout>
#include <QFrame>
#include <QTextEdit>
class Palette : public QDialog
{
    Q_OBJECT

public:
    Palette(QWidget *parent = nullptr);
    ~Palette();
private:
    QFrame *ctrlFrame; //颜色选择面板
    QLabel *labWindow;
    QComboBox *comboxWindow;

    QLabel *labTextWindow;
    QComboBox *comboxTextWindow;

    QLabel *labButton;
    QComboBox *comboxButton;


    QLabel *labTextButton;
    QComboBox *comboxTextButton;

    QLabel *labBase;
    QComboBox *comboxBase;


    QFrame *contentFrame;//具体显示面板
    QLabel *label1;
    QComboBox *comBox1;

    QLabel *label2;
    QLineEdit *lineEdit2;

    QTextEdit *textEdit;
    QPushButton *btnOk;
    QPushButton  *btnCancel;


public:
    void  createCtrlFrame();  //完成窗体左半边颜色选择区的创建
    void  createContentFrame();  //完成窗体右半部分的创建
    void  fillColorList(QComboBox *);  //完成向颜色下拉框中插入颜色的工作

private slots:
    void  ShowWindow();
    void  ShowWindowText();
    void  ShowButton();
    void  ShowButtonText();
    void  showBase();






};
#endif // PALETTE_H
#include "palette.h"
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLineEdit>
#include <QProgressBar>
#include <QLabel>
#include <QComboBox>
#include <QPushButton>
#include <QGridLayout>
#include <QFrame>
#include <QTextEdit>
#include <QVBoxLayout>
Palette::Palette(QWidget *parent)
    : QDialog(parent)
{

    createCtrlFrame();
    createContentFrame();
    QHBoxLayout *mainLayout=new QHBoxLayout(this);
    mainLayout->addWidget(ctrlFrame);
    mainLayout->addWidget(contentFrame);

}

Palette::~Palette()
{
}
//颜色选择面板  左半部分
void Palette::createCtrlFrame()
{
                            
    ctrlFrame=new QFrame;
    labWindow=new QLabel(QStringLiteral("QPalette::Window: "));
    comboxWindow=new QComboBox;
    fillColorList(comboxWindow);//向下拉列表框中插入各种不同的颜色选项


    labTextWindow=new QLabel(QStringLiteral("QPalette::WindowText: "));
    comboxTextWindow=new QComboBox;
    fillColorList(comboxTextWindow);

    labButton=new QLabel(QStringLiteral("QPalette::Button: "));
    comboxButton=new QComboBox;
    fillColorList(comboxButton);

    labTextButton=new QLabel(QStringLiteral("QPalette::ButtonText: "));
    comboxTextButton=new QComboBox;
    fillColorList(comboxTextButton);

    labBase=new QLabel(QStringLiteral("QPalette::Base: "));
    comboxBase=new QComboBox;
    fillColorList(comboxBase);

    //信号与槽
        connect(comboxWindow,SIGNAL(activated(int)),this,SLOT(ShowWindow()));
        connect(comboxWindow,SIGNAL(activated(int)),this,SLOT(ShowWindowText()));
        connect(comboxWindow,SIGNAL(activated(int)),this,SLOT(ShowButton()));
        connect(comboxWindow,SIGNAL(activated(int)),this,SLOT(ShowButtonText()));
        connect(comboxWindow,SIGNAL(activated(int)),this,SLOT(showBase()));

     QGridLayout  *mainLayout=new  QGridLayout(ctrlFrame);
     mainLayout->addWidget(labWindow,0,0);
     mainLayout->addWidget(comboxWindow,0,1);

     mainLayout->addWidget(labTextWindow,1,0);
     mainLayout->addWidget(comboxTextWindow,1,1);

     mainLayout->addWidget(labButton,2,0);
     mainLayout->addWidget(comboxButton,2,1);

     mainLayout->addWidget(labTextButton,3,0);
     mainLayout->addWidget(comboxTextButton,3,1);

     mainLayout->addWidget(labBase,4,0);
     mainLayout->addWidget(comboxBase,4,1);
}

//具体显示面板
void Palette::createContentFrame()
{

    contentFrame=new QFrame;
    label1=new QLabel(QStringLiteral("请选择一个值:"));;
    comBox1=new QComboBox;

    label2=new QLabel(QStringLiteral("请输入字符串:"));;
    lineEdit2=new QLineEdit;
    textEdit=new QTextEdit;

    QGridLayout *TopLayout=new QGridLayout;
    TopLayout->addWidget(label1,0,0);
    TopLayout->addWidget(comBox1,0,1);
    TopLayout->addWidget(label2,1,0);
    TopLayout->addWidget(lineEdit2,1,1);
    TopLayout->addWidget(textEdit,2,0,1,2);

    btnOk=new QPushButton(QStringLiteral("确认"));
    btnCancel=new QPushButton(QStringLiteral("取消"));

    QHBoxLayout *bottomLayout=new QHBoxLayout;
    bottomLayout->addStretch(1);
    bottomLayout->addWidget(btnOk);
    bottomLayout->addWidget(btnCancel);

    QVBoxLayout *mainLayout=new QVBoxLayout(contentFrame);
    mainLayout->addLayout(TopLayout);
    mainLayout->addLayout(bottomLayout);
}

void Palette::fillColorList(QComboBox *comboBox)
{
    QStringList colorList=QColor::colorNames();
    QString color; //新建一个QString对象,为遍历做准备
    foreach(color,colorList)
    {
        QPixmap pix(QSize(70,20));//
        pix.fill(QColor(color));
        comboBox->addItem(QIcon(pix),NULL);
        comboBox->setIconSize(QSize(70,20));
        comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);//设置下拉尺寸符合AdjustToContents符合内容的大小
    }

}


//Window背景颜色的选择
void Palette::ShowWindow()
{

    //获取当前选择的颜色值
    QStringList colorList=QColor::colorNames();
    QColor color=QColor(colorList[comboxWindow->currentIndex()]);
    QPalette p=contentFrame->palette(); //获取右边的窗体contentFrame的调色版信息
    p.setColor(QPalette::Window,color);//设置右边的窗体contentFrame的窗体的window类颜色,即为背景色
                                       //第一个参数是设置的颜色主题,第二个颜色是设置的具体颜色
    //把修改后的调色板信息应用到contentFrame窗体中,更新显示
    contentFrame->setPalette(p);
    contentFrame->update();

}

//Window文字颜色的选择
void Palette::ShowWindowText()
{
    //获取当前选择的颜色值
    QStringList colorList=QColor::colorNames();
    QColor color=QColor(colorList[comboxTextWindow->currentIndex()]);
    QPalette p=contentFrame->palette(); //获取右边的窗体contentFrame的调色版信息
    p.setColor(QPalette::WindowText,color);//设置右边的窗体contentFrame的窗体的window类颜色,即为背景色
                                       //第一个参数是设置的颜色主题,第二个颜色是设置的具体颜色
    //把修改后的调色板信息应用到contentFrame窗体中,更新显示
    contentFrame->setPalette(p);
    //contentFrame->update();
}

//按钮背景颜色的选择
void Palette::ShowButton()
{
    //获取当前选择的颜色值
    QStringList colorList=QColor::colorNames();
    QColor color=QColor(colorList[comboxButton->currentIndex()]);
    QPalette p=contentFrame->palette(); //获取右边的窗体contentFrame的调色版信息
    p.setColor(QPalette::Button,color);//设置右边的窗体contentFrame的窗体的window类颜色,即为背景色
                                       //第一个参数是设置的颜色主题,第二个颜色是设置的具体颜色
    //把修改后的调色板信息应用到contentFrame窗体中,更新显示
    contentFrame->setPalette(p);
    contentFrame->update();
}


//按钮上文字颜色的选择
void Palette::ShowButtonText()
{
    //获取当前选择的颜色值
    QStringList colorList=QColor::colorNames();
    QColor color=QColor(colorList[comboxTextButton->currentIndex()]);
    QPalette p=contentFrame->palette(); //获取右边的窗体contentFrame的调色版信息
    p.setColor(QPalette::ButtonText,color);//设置右边的窗体contentFrame的窗体的window类颜色,即为背景色
                                       //第一个参数是设置的颜色主题,第二个颜色是设置的具体颜色
    //把修改后的调色板信息应用到contentFrame窗体中,更新显示
    contentFrame->setPalette(p);
    contentFrame->update();
}

//文本背景框颜色
void Palette::showBase()
{
    //获取当前选择的颜色值
    QStringList colorList=QColor::colorNames();
    QColor color=QColor(colorList[comboxBase->currentIndex()]);
    QPalette p=contentFrame->palette(); //获取右边的窗体contentFrame的调色版信息
    p.setColor(QPalette::Base,color);//设置右边的窗体contentFrame的窗体的window类颜色,即为背景色
                                       //第一个参数是设置的颜色主题,第二个颜色是设置的具体颜色
    //把修改后的调色板信息应用到contentFrame窗体中,更新显示
    contentFrame->setPalette(p);
    contentFrame->update();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值