概述
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::Button | button背景颜色。这个背景颜色能是不同于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);
-
}
转自:https://blog.csdn.net/m0_37806112/article/details/79899675
最后
以上就是粗犷大船为你收集整理的QPalette类详细使用方法的全部内容,希望文章能够帮你解决QPalette类详细使用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复