我是靠谱客的博主 迷你冷风,最近开发中收集的这篇文章主要介绍Qt之对话框设计——利用QPalette改变控件颜色,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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::Buttonbutton背景颜色。这个背景颜色能是不同于window作为一些风格,要求一个不同的背景颜色作为button
QPalette::ButtonText一个前景颜色被用来作为button颜色.
QPalette::BrightText一个text颜色是很不同于windowText,很好的对比与dark。典型的被用来为text,需要被画,在text或者windowText将给差的对比,就像在按下的button。注意text颜色能被用来为事情,而不只是单词;text颜色通常被用来为text,但是他是相当普通的使用text颜色角色为行,图标,等等。

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

void setAutoFillBackground ( bool enabled );


image

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);
}

最后

以上就是迷你冷风为你收集整理的Qt之对话框设计——利用QPalette改变控件颜色的全部内容,希望文章能够帮你解决Qt之对话框设计——利用QPalette改变控件颜色所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部