zoukankan      html  css  js  c++  java
  • 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::Button button背景颜色。这个背景颜色能是不同于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);
    }
    

  • 相关阅读:
    Delphi WinAPI SetLocaleInfo / GetLocaleInfo
    语言环境代码LCID对照表
    Delphi WinAPI SetThreadLocale
    光刻技术发展
    关于TVM的点滴记录
    TVM 各个模块总体架构
    TVM 图优化Graph Optimization
    Atomic Layer Deposition原子层沉积技术
    智加VS图森VS嬴彻
    汽车网络处理设计
  • 原文地址:https://www.cnblogs.com/hanzhaoxin/p/2775918.html
Copyright © 2011-2022 走看看