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

简介:

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

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

void QPalette::setColor ( ColorRole role, const QColor & color );
void QPalette::setColor ( ColorGroup groupColorRole role, const QColor & color );
void QPalette::setBrush ( ColorRole role, const QBrush & brush );
void QPalette::setBrush ( ColorGroup groupColorRole 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

  1. #ifndef MAINDLG_H  
  2. #define MAINDLG_H  
  3.   
  4. #include <QtGui/QDialog>  
  5. #include <QFrame>  
  6. #include <QComboBox>  
  7.   
  8.   
  9. class MainDlg : public QDialog  
  10. {  
  11.     Q_OBJECT  
  12.   
  13. public:  
  14.     MainDlg(QWidget *parent = 0, Qt::WFlags flags = 0);  
  15.     ~MainDlg();  
  16.   
  17.     void createCtrlFrame();  
  18.     void createContentFrame();  
  19.     void fillColorList(QComboBox *);  
  20.   
  21. public slots:  
  22.     void sl_window();  
  23.     void sl_windowText();  
  24.     void sl_button();  
  25.     void sl_buttonText();  
  26.     void sl_base();  
  27.   
  28. private:  
  29.     QFrame *ctrlFrame;  //颜色选择面板  
  30.     QFrame *contentFrame;   //具体显示面板  
  31.     QComboBox *cbbWindow;  
  32.     QComboBox *cbbWindowText;  
  33.     QComboBox *cbbButton;  
  34.     QComboBox *cbbButtonText;  
  35.     QComboBox * cbbBase;  
  36.       
  37. };  
  38.   
  39. #endif // MAINDLG_H  

maindlg.cpp

  1. #include "maindlg.h"  
  2. #include <QPalette>  
  3. #include <QHBoxLayout>  
  4. #include <QVBoxLayout>  
  5. #include <QGridLayout>  
  6. #include <QStringList>  
  7. #include <QColor>  
  8. #include <QPixmap>  
  9. #include <QSpinBox>  
  10. #include <QTextEdit>  
  11. #include <QLineEdit>  
  12. #include <QPushButton>  
  13. #include <QLabel>  
  14.   
  15. MainDlg::MainDlg(QWidget *parent, Qt::WFlags flags)  
  16.     : QDialog(parent, flags)  
  17. {  
  18.     createCtrlFrame();  
  19.     createContentFrame();  
  20.   
  21.     QHBoxLayout *mainLayout = new QHBoxLayout(this);  
  22.     mainLayout->addWidget(ctrlFrame);  
  23.     mainLayout->addWidget(contentFrame);  
  24.     mainLayout->setMargin(10);  
  25.     mainLayout->setSpacing(5);  
  26.     mainLayout->setSizeConstraint(QLayout::SetFixedSize);  
  27. }  
  28.   
  29. MainDlg::~MainDlg()  
  30. {  
  31.   
  32. }  
  33.   
  34. void MainDlg::fillColorList(QComboBox *cbb)  
  35. {  
  36.     QStringList colorNameList = QColor::colorNames();  
  37.   
  38.     QString colorName;  
  39.     foreach(colorName,colorNameList)  
  40.     {  
  41.         QPixmap pix_color(70,20);  
  42.         pix_color.fill(QColor(colorName));  
  43.   
  44.         cbb->addItem(QIcon(pix_color),NULL);  
  45.         cbb->setIconSize(QSize(70,20));  
  46.         cbb->setSizeAdjustPolicy(QComboBox::AdjustToContents);   //设置下拉列表的尺寸符合内容的大小  
  47.     }  
  48. }  
  49.   
目录
相关文章
|
7月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
1148 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
7月前
|
前端开发 程序员 API
【Qt】控件介绍
【Qt】控件介绍
|
7月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
1190 4
|
7月前
|
数据安全/隐私保护
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
585 4
|
7月前
|
搜索推荐 C++
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
310 4
|
7月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
475 3
|
7月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
186 3
|
7月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
904 3
|
7月前
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
228 3