QPalette类详细使用方法

QPalette( [ˈpælət] 调色板)类相当于对话框或控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个QPalette对象,在显示时按照它的QPalette对象中对各部分各状态下的颜色的描述来进行绘制。

QPalette类有两个基本的概念,一个是ColorGroup,另一个是ColorRole。

void QPalette::setColor ( ColorRole role, const QColor & color );
void QPalette::setColor ( ColorGroup group, ColorRole role, const QColor & color );
void QPalette::setBrush ( ColorRole role, const QBrush & brush );
void QPalette::setBrush ( ColorGroup group, ColorRole role, const QBrush & brush );

ColorGroup:

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

ColorRole:

QPalette::Window一个常规的背景颜色
QPalette::Background这个值是废弃的,使用window代替
QPalette::WindowText一个一般的前景颜色
QPalette::Foreground这个值是废弃的,使用windowText代替.
QPalette::Base最长使用来作为text背景颜色为整个widget,但是也能被用来为其他的绘画,像combobox的上下清单的背景和工具栏句柄。它通常是白的或者其他亮的颜色.
QPalette::AlternateBase被用来作为轮流的背景颜色,轮流的行颜色
QPalette::ToolTipBase被用来作为背景颜色为QToolTip和QWhatsThis。工具尖端使用QPalette不活跃的颜色组,因为工具尖端不是活跃的窗口.
QPalette::ToolTipText被用来作为前景颜色为QToolTip和QWhatsThis.工具尖端使用QPalette不活跃的颜色组,因为工具尖端不是活跃的窗口.
QPalette::Text前景颜色使用base.这通常和windowText相同,它一定提供好的对比window和base
QPalette::Buttonbutton背景颜色。这个背景颜色能是不同于window作为一些风格,要求一个不同的背景颜色作为button
QPalette::ButtonText一个前景颜色被用来作为button颜色.
QPalette::BrightText一个text颜色是很不同于windowText,很好的对比与dark。典型的被用来为text,需要被画,在text或者windowText将给差的对比,就像在按下的button。注意text颜色能被用来为事情,而不只是单词;text颜色通常被用来为text,但是他是相当普通的使用text颜色角色为行,图标,等等。

另外,在设置对话框和控件的背景色时还会用到:

void setAutoFillBackground ( bool enabled );

.h文件

#include <QtWidgets/QDialog>
#include<QComboBox>
#include<QFrame>
#include "ui_Palette.h"

class Palette : public QDialog
{
	Q_OBJECT

public:
	Palette(QWidget *parent = Q_NULLPTR);
	void createSelectFrame();
	void createContentFrame();
	void fillColorList(QComboBox *);
public slots:
	void sl_window();
	void sl_windowText();
	void sl_button();
	void sl_buttonText();
	void sl_base();
private:

	QFrame *selectFrame;    //颜色选择面板  
	QFrame *contentFrame;   //具体显示面板  
	QComboBox *cbbWindow;
	QComboBox *cbbWindowText;
	QComboBox *cbbButton;
	QComboBox *cbbButtonText;
	QComboBox * cbbBase;
};


.cpp文件
#include "Palette.h"
#include <QPalette>  
#include <QHBoxLayout>  
#include <QVBoxLayout>  
#include <QGridLayout>  
#include <QStringList>  
#include <QColor>  
#include <QPixmap>  
#include <QSpinBox>  
#include <QTextEdit>  
#include <QLineEdit>  
#include <QPushButton>  
#include <QLabel>  
#pragma execution_character_set("utf-8")
Palette::Palette(QWidget *parent)
	: QDialog(parent)
{

	createSelectFrame();
	createContentFrame();
	QHBoxLayout *mainLayout = new QHBoxLayout(this);
	mainLayout->addWidget(selectFrame);
	mainLayout->addWidget(contentFrame);
	mainLayout->setMargin(10);
	mainLayout->setSpacing(5);
	//固定窗口的大小,且根据内部控件所占用的位置自动调节大小
	mainLayout->setSizeConstraint(QLayout::SetFixedSize);

}
void Palette::createSelectFrame()
{
	selectFrame = new QFrame;
	
	QLabel *labWindow = new QLabel(tr("QPalette::Window:"));
	QLabel *labWindowText = new QLabel(tr("QPalette::WindowText:"));
	QLabel *labButton = new QLabel(tr("QPalette::Button:"));
	QLabel *labButtonText = new QLabel(tr("QPalette::ButtonText:"));
	QLabel *labBase = new QLabel(tr("QPalette::Base:"));

	//组合框
	cbbWindow = new QComboBox;
	fillColorList(cbbWindow);
	connect(cbbWindow, SIGNAL(activated(int)), this, SLOT(sl_window()));
	cbbWindowText = new QComboBox;
	fillColorList(cbbWindowText);
	connect(cbbWindowText, SIGNAL(activated(int)), this, SLOT(sl_windowText()));
	cbbButton = new QComboBox;
	fillColorList(cbbButton);
	connect(cbbButton, SIGNAL(activated(int)), this, SLOT(sl_button()));
	cbbButtonText = new QComboBox;
	fillColorList(cbbButtonText);
	connect(cbbButtonText, SIGNAL(activated(int)), this, SLOT(sl_buttonText()));
	cbbBase = new QComboBox;
	fillColorList(cbbBase);
	connect(cbbBase, SIGNAL(activated(int)), this, SLOT(sl_base()));

	QGridLayout *ctrlLayout = new QGridLayout(selectFrame);
	ctrlLayout->addWidget(labWindow, 0, 0);
	ctrlLayout->addWidget(labWindowText, 1, 0);
	ctrlLayout->addWidget(labButton, 2, 0);
	ctrlLayout->addWidget(labButtonText, 3, 0);
	ctrlLayout->addWidget(labBase, 4, 0);
	ctrlLayout->addWidget(cbbWindow, 0, 1);
	ctrlLayout->addWidget(cbbWindowText, 1, 1);
	ctrlLayout->addWidget(cbbButton, 2, 1);
	ctrlLayout->addWidget(cbbButtonText, 3, 1);
	ctrlLayout->addWidget(cbbBase, 4, 1);

	ctrlLayout->setMargin(5);  //设置边距
	ctrlLayout->setSpacing(5); //间距

}
void Palette::fillColorList(QComboBox *cbb)
{
	QStringList colorNameList = QColor::colorNames();

	QString colorName;
	foreach(colorName, colorNameList)
	{
		QPixmap pix_color(70, 20);
		pix_color.fill(QColor(colorName));

		cbb->addItem(QIcon(pix_color), NULL);
		cbb->setIconSize(QSize(70, 20));
		cbb->setSizeAdjustPolicy(QComboBox::AdjustToContents);   //设置下拉列表的尺寸符合内容的大小  
	}
}
void Palette::createContentFrame()
{
	contentFrame = new QFrame;
	QLabel *labValue = new QLabel("Please select one of the values");
	QSpinBox *spbValue = new QSpinBox;  

	QHBoxLayout *valueLayout =new QHBoxLayout;
	valueLayout->addWidget(labValue);
	valueLayout->addWidget(spbValue);
	valueLayout->setSpacing(5);

	QLabel *labString = new QLabel("please input a string");
	QLineEdit *edtString = new QLineEdit;
	QHBoxLayout *stringWidget = new QHBoxLayout;
	stringWidget->addWidget(labString);
	stringWidget->addWidget(edtString);
	stringWidget->setSpacing(5);

	QTextEdit *edtHello = new QTextEdit("hello Qt");

	QPushButton *btnOk = new QPushButton("OK");
	QPushButton *btnCancel = new QPushButton("Cancel");

	QHBoxLayout *buttonLayout = new QHBoxLayout;
	buttonLayout->addStretch(1);  //添加一个填充
	buttonLayout->addWidget(btnOk);
	buttonLayout->addWidget(btnCancel);
	buttonLayout->setSpacing(5);

	QVBoxLayout *contentLayout = new QVBoxLayout(contentFrame);
	contentLayout->addLayout(valueLayout);
	contentLayout->addLayout(stringWidget);
	contentLayout->addWidget(edtHello);
	contentLayout->addLayout(buttonLayout);

	btnOk->setAutoFillBackground(true);
	btnCancel->setAutoFillBackground(true);
	contentFrame->setAutoFillBackground(true);
}

void Palette::sl_window()
{
	QStringList colorList = QColor::colorNames();
	QColor color = QColor(colorList[cbbWindow->currentIndex()]);
	//获取当前调色板
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::Window,color);
	contentFrame->setPalette(p);
}
void Palette::sl_windowText()
{
	QStringList colorList = QColor::colorNames();
	QColor color = QColor(colorList[cbbWindowText->currentIndex()]);
	//获取当前调色板
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::WindowText, color);
	contentFrame->setPalette(p);
	selectFrame->setPalette(p);

}
void Palette::sl_button()
{
	QStringList colorList = QColor::colorNames();
	QColor color = QColor(colorList[cbbButton->currentIndex()]);
	//获取当前调色板
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::Button, color);
	contentFrame->setPalette(p);

}
void Palette::sl_buttonText()
{
	QStringList colorList = QColor::colorNames();
	QColor color = QColor(colorList[cbbButtonText->currentIndex()]);
	//获取当前调色板
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::ButtonText, color);
	contentFrame->setPalette(p);


}
void Palette::sl_base()
{
	QStringList colorList = QColor::colorNames();
	QColor color = QColor(colorList[cbbBase->currentIndex()]);
	//获取当前调色板
	QPalette p = contentFrame->palette();
	p.setColor(QPalette::Base, color);
	contentFrame->setPalette(p);
}

 本文转自:http://hanzhaoxin.cnblogs.com/      作者:韩兆新

 向大佬学习

  • 10
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值