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类详细使用方法内容请搜索靠谱客的其他文章。
发表评论 取消回复