QPalette类相当于对话框或控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个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 );
maindlg.h
- #ifndef MAINDLG_H
- #define MAINDLG_H
- #include <QtGui/QDialog>
- #include <QFrame>
- #include <QComboBox>
- class MainDlg : public QDialog
- {
- Q_OBJECT
- public:
- MainDlg(QWidget *parent = 0, Qt::WFlags flags = 0);
- ~MainDlg();
- void createCtrlFrame();
- void createContentFrame();
- void fillColorList(QComboBox *);
- public slots:
- void sl_window();
- void sl_windowText();
- void sl_button();
- void sl_buttonText();
- void sl_base();
- private:
- QFrame *ctrlFrame; //颜色选择面板
- QFrame *contentFrame; //具体显示面板
- QComboBox *cbbWindow;
- QComboBox *cbbWindowText;
- QComboBox *cbbButton;
- QComboBox *cbbButtonText;
- QComboBox * cbbBase;
- };
- #endif // MAINDLG_H
maindlg.cpp
- #include "maindlg.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>
- MainDlg::MainDlg(QWidget *parent, Qt::WFlags flags)
- : QDialog(parent, flags)
- {
- createCtrlFrame();
- createContentFrame();
- QHBoxLayout *mainLayout = new QHBoxLayout(this);
- mainLayout->addWidget(ctrlFrame);
- mainLayout->addWidget(contentFrame);
- mainLayout->setMargin(10);
- mainLayout->setSpacing(5);
- mainLayout->setSizeConstraint(QLayout::SetFixedSize);
- }
- MainDlg::~MainDlg()
- {
- }
- void MainDlg::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 MainDlg::createCtrlFrame()
- {
- ctrlFrame = 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()));
- int col_lab = 0;
- int col_cbb = 1;
- QGridLayout *ctrlLayout = new QGridLayout(ctrlFrame);
- ctrlLayout->addWidget(labWindow,0,col_lab);
- ctrlLayout->addWidget(labWindowText,1,col_lab);
- ctrlLayout->addWidget(labButton,2,col_lab);
- ctrlLayout->addWidget(labButtonText,3,col_lab);
- ctrlLayout->addWidget(labBase,4,col_lab);
- ctrlLayout->addWidget(cbbWindow,0,col_cbb);
- ctrlLayout->addWidget(cbbWindowText,1,col_cbb);
- ctrlLayout->addWidget(cbbButton,2,col_cbb);
- ctrlLayout->addWidget(cbbButtonText,3,col_cbb);
- ctrlLayout->addWidget(cbbBase,4,col_cbb);
- ctrlLayout->setMargin(5);
- ctrlLayout->setSpacing(5);
- }
- void MainDlg::createContentFrame()
- {
- contentFrame = new QFrame;
- QLabel *labValue = new QLabel(tr("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(tr("Please input a string"));
- QLineEdit *edtString = new QLineEdit;
- QHBoxLayout *stringLayout = new QHBoxLayout;
- stringLayout->addWidget(labString);
- stringLayout->addWidget(edtString);
- stringLayout->setSpacing(5);
- QTextEdit *edtHelloQt = new QTextEdit(tr("Hello Qt!"));
- QPushButton *btnOk = new QPushButton(tr("OK"));
- QPushButton *btnCancel =new QPushButton(tr("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(stringLayout);
- contentLayout->addWidget(edtHelloQt);
- contentLayout->addLayout(buttonLayout);
- contentLayout->setMargin(5);
- contentLayout->setSpacing(5);
- btnOk->setAutoFillBackground(true);
- btnCancel->setAutoFillBackground(true);
- contentFrame->setAutoFillBackground(true);
- }
- void MainDlg::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 MainDlg::sl_windowText()
- {
- QStringList colorList = QColor::colorNames();
- QColor color = QColor(colorList[cbbWindowText->currentIndex()]);
- QPalette p = contentFrame->palette();
- p.setColor(QPalette::WindowText,color);
- contentFrame->setPalette(p);
- }
- void MainDlg::sl_button()
- {
- QStringList colorNameList = QColor::colorNames();
- QColor m_color = QColor(colorNameList[cbbButton->currentIndex()]);
- QPalette p = contentFrame->palette();
- p.setColor(QPalette::Button,m_color);
- contentFrame->setPalette(p);
- }
- void MainDlg::sl_buttonText()
- {
- QStringList colorNameList = QColor::colorNames();
- QColor m_color = QColor(colorNameList[cbbButtonText->currentIndex()]);
- QPalette p = contentFrame->palette();
- p.setColor(QPalette::ButtonText,m_color);
- contentFrame->setPalette(p);
- }
- void MainDlg::sl_base()
- {
- QStringList colorNameList = QColor::colorNames();
- QColor m_color = QColor(colorNameList[cbbBase->currentIndex()]);
- QPalette p = contentFrame->palette();
- p.setColor(QPalette::Base,m_color);
- contentFrame->setPalette(p);
- }