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();
}