Qt之对话框设计——利用QPalette改变控件颜色

QPalette类相当于对话框或控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个QPalette对象,在显示时按照它的QPalette对象中对各部分各状态下的颜色的描述来进行绘制。

QPalette类有两个基本的概念,一个是ColorGroup,另一个是ColorRole。

  • void QPalette::setColor ( ColorRolerole, const QColor &color );
  • void QPalette::setColor ( ColorGroupgroup, ColorRolerole, const QColor &color );
  • void QPalette::setBrush ( ColorRolerole, const QBrush &brush );
  • void QPalette::setBrush ( ColorGroupgroup, ColorRolerole, 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颜色角色为行,图标,等等。


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

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

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

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

猜你喜欢

转载自blog.csdn.net/m0_60259116/article/details/128685232