目录
调色板类20210118
实例:设置相关部件的背景色与前景色
新建:Qt Widgets Application
项目名称:Palette
类名:Palette
基类:QDialog
不选择“创建界面”
代码及详细解释如下:
【palette.cpp】
#include "palette.h"
#include <QHBoxLayout>
#include <QGridLayout>
//#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; //颜色选择面板
//-----------------------------------------------------------------------------------
windowLabel = new QLabel(tr("QPalette::Window:")); //创建对象:前景色
windowComboBox = new QComboBox;
fillColorList(windowComboBox);
connect(windowComboBox,SIGNAL(activated(int)),this,SLOT(showWindow())); //【1】改变背景颜色
//-----------------------------------------------------------------------------------
windowTextLabel = new QLabel(tr("QPalette::WindowText:"));//创建对象:背景色
windowTextComboBox = new QComboBox;
fillColorList(windowTextComboBox);
connect(windowTextComboBox,SIGNAL(activated(int)),this,SLOT(showWindowText())); //【2】改变文字颜色
//-----------------------------------------------------------------------------------
buttonLabel = new QLabel(tr("QPalette::Button:"));
buttonComboBox = new QComboBox;
fillColorList(buttonComboBox);
connect(buttonComboBox,SIGNAL(activated(int)),this,SLOT(showButton())); //【3】改变按钮背景色颜色
//-----------------------------------------------------------------------------------
buttonTextLabel = new QLabel(tr("QPalette::ButtonText:"));
buttonTextComboBox = new QComboBox;
fillColorList(buttonTextComboBox);
connect(buttonTextComboBox,SIGNAL(activated(int)),this,SLOT(showButtonText())); //【4】改变按钮文字颜色
//-----------------------------------------------------------------------------------
baseLabel = new QLabel(tr("QPalette::Base:"));
baseComboBox = new QComboBox;
fillColorList(baseComboBox);
connect(baseComboBox,SIGNAL(activated(int)),this,SLOT(showBase())); //【5】改变可输入文本框背景色
//网格布局
QGridLayout *mainLayout = new QGridLayout(ctrlFrame);
mainLayout->setSpacing(20);
mainLayout->addWidget(windowLabel,0,0);
mainLayout->addWidget(windowComboBox,0,1);
mainLayout->addWidget(windowTextLabel,1,0);
mainLayout->addWidget(windowTextComboBox,1,1);
mainLayout->addWidget(buttonLabel,2,0);
mainLayout->addWidget(buttonComboBox,2,1);
mainLayout->addWidget(buttonTextLabel,3,0);
mainLayout->addWidget(buttonTextComboBox,3,1);
mainLayout->addWidget(baseLabel,4,0);
mainLayout->addWidget(baseComboBox,4,1);
}
//右边:显示所选颜色对窗体外观的改变
void Palette::createContentFrame()
{
contentFrame = new QFrame;
label1 = new QLabel(tr("请选择一个值:"));
comboBox1 = new QComboBox;
label2 = new QLabel(tr("请输入字符串:"));
lineEdit2 = new QLineEdit;
textEdit = new QTextEdit;
//网格布局
QGridLayout *TopLayout = new QGridLayout;
TopLayout->addWidget(label1,0,0);
TopLayout->addWidget(comboBox1,0,1);
TopLayout->addWidget(label2,1,0);
TopLayout->addWidget(lineEdit2,1,1);
TopLayout->addWidget(textEdit,2,0,1,2);
OkBtn = new QPushButton(tr("确认"));
CancelBtn = new QPushButton(tr("取消"));
//水平布局
QHBoxLayout *BottomLayout = new QHBoxLayout(this);
BottomLayout->addStretch(1);
BottomLayout->addWidget(OkBtn);
BottomLayout->addWidget(CancelBtn); //addWidget()加入控件
//垂直布局
QVBoxLayout *mainLayout = new QVBoxLayout(contentFrame);
mainLayout->addLayout(TopLayout);
mainLayout->addLayout(BottomLayout); //addLayout()加入子布局
}
//向下拉列表中插入颜色
void Palette::fillColorList(QComboBox *comboBox)
{
QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
QString color;//为循环遍历做准备
foreach(color,colorList)
{
QPixmap pix(QSize(70,20)); //新建一个QPixmap类的对象pix作为显示颜色的图标
pix.fill(QColor(color));
comboBox->addItem(QIcon(pix),NULL); //为下拉列表框插入一个条目,并以准备好的pix作为插入条目的图标,名称为NULL,即不显示颜色的名称。
comboBox->setIconSize(QSize(70,20));//设置图标的尺寸为与pix尺寸相同的长方形(图标默认尺寸为一个方形)
comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);//下拉列表框的尺寸调整策略为AdjustToContents(符合内容的大小)
}
}
//改变背景颜色(前景色)
void Palette::showWindow()
{
QStringList colorList = QColor::colorNames(); //获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
QColor color = QColor(colorList[windowComboBox->currentIndex()]); //获取当前选择的颜色值
QPalette p = contentFrame->palette(); //获得右边窗体的调色板信息
p.setColor(QPalette::Window,color); //设置右边窗体的Window类颜色(背景色)
//setColor(设置的颜色主题,具体颜色值)
contentFrame->setPalette(p);
contentFrame->update();
}
//改变文字颜色(前景色)
void Palette::showWindowText()
{
QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
QColor color = QColor(colorList[windowTextComboBox->currentIndex()]);//获取当前选择的颜色值
QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
p.setColor(QPalette::WindowText,color); //设置右边窗体的Window类颜色(背景色)
//setColor(设置的颜色主题,具体颜色值)
contentFrame->setPalette(p);
contentFrame->update();
}
//改变按钮背景色颜色
void Palette::showButton()
{
QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
QColor color = QColor(colorList[buttonComboBox->currentIndex()]);//获取当前选择的颜色值
QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
p.setColor(QPalette::Button,color); //设置右边窗体的Window类颜色(背景色)
//setColor(设置的颜色主题,具体颜色值)
contentFrame->setPalette(p);
contentFrame->update();
}
//改变按钮文字颜色
void Palette::showButtonText()
{
QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
QColor color = QColor(colorList[buttonTextComboBox->currentIndex()]);//获取当前选择的颜色值
QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
p.setColor(QPalette::ButtonText,color); //设置右边窗体的Window类颜色(背景色)
//setColor(设置的颜色主题,具体颜色值)
contentFrame->setPalette(p);
contentFrame->update();
}
//改变可输入文本框背景色
void Palette::showBase()
{
QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
QColor color = QColor(colorList[baseComboBox->currentIndex()]);//获取当前选择的颜色值
QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
p.setColor(QPalette::Base,color); //设置右边窗体的Window类颜色(背景色)
//setColor(设置的颜色主题,具体颜色值)
contentFrame->setPalette(p);
contentFrame->update();
}
【palette.h】
#ifndef PALETTE_H
#define PALETTE_H
#include <QDialog>
//#include <QFrame>
#include <QLabel>
#include <QComboBox>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
class Palette : public QDialog
{
Q_OBJECT
public:
Palette(QWidget *parent = 0);
~Palette();
void createCtrlFrame(); //窗体左边:创建颜色选择区
void createContentFrame(); //窗体右边:显示所选颜色对窗体外观的改变
void fillColorList(QComboBox *);//向下拉列表中插入颜色
private:
//窗体左边
QFrame *ctrlFrame;
QLabel *windowLabel;
QComboBox *windowComboBox;
QLabel *windowTextLabel;
QComboBox *windowTextComboBox;
QLabel *buttonLabel;
QComboBox *buttonComboBox;
QLabel *buttonTextLabel;
QComboBox *buttonTextComboBox;
QLabel *baseLabel;
QComboBox *baseComboBox;
//窗体右边
QFrame *contentFrame;
QLabel *label1;
QComboBox *comboBox1;
QLabel *label2;
QLineEdit *lineEdit2;
QTextEdit *textEdit;
QPushButton *OkBtn;
QPushButton *CancelBtn;
private slots:
void showWindow();
void showWindowText();
void showButton();
void showButtonText();
void showBase();
};
#endif // PALETTE_H
【main.cpp】
#include "palette.h" //使用哪个类就必须把包含该类的头文件引用过来(*.h文件中包含了相应类的定义)
#include <QApplication> //每个使用[Qt图形化应用程序]中都必须使用一个QApplication对象
//QApplication管理各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等
int main(int argc, char *argv[]) //这里是应用程序的入口。几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。
//所有Qt程序必须有且只有一个main()函数。argc是命令行变量的数量,argv是命令行变量的数组。
{
QApplication a(argc, argv); // a是创建的QApplication类的对象,用来处理命令行变量。所有被Qt识别的命令行参数都将从argv中移去,argc也因此减少
Palette w; //创建Palette类的对象(包含该类头文件)
w.show(); //窗口部件可见
return a.exec(); //main()函数将控制权交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。
//exec()函数中,Qt接收并处理用户和系统的事件,并且将他们传递给适当的窗口部件。
}
备注:背景色自动填充
一定要加上这句话:setAutoFillBackground()