QPalette類: 1、 QPalette類是Qt視窗中元件的調色闆,管理着Qt元件的所有顔色資訊,控制着元件的顔色(QPalette是Qt中标志顔色資訊的資料結構) 2、 每個視窗元件都擁有一個QPalette對象(QPalette對象為QWidget類的成員) 3、 視窗元件外觀所使用的顔色都定義于調色闆中 4、 重新設定視窗元件調色闆的值能夠改變特定區域的顔色 顔色組與顔色角色: QPalette中的兩個概念:顔色組( enumQPalette::ColorGroup )、顔色角色( enum QPalette::ColorRole ),顔色組決定什麼時候采用指定配色方案,顔色角色決定為誰采用指定配色方案 顔色組: 1、激活顔色組(QPalette::Active)元件獲得焦點時使用的配色方案 2、非激活顔色組(QPalette::Inactive)元件未獲得焦點時使用的配色方案 3、失效顔色組(QPalette::Disabled)元件處于不可用狀态使用的配色方案 顔色角色: 主要角色:
QPalette::Window | 一個正常的背景顔色 |
QPalette::Background | 這個值是廢棄的,使用window代替 |
QPalette::WindowText | 一個一般的前景顔色 |
QPalette::Foreground | 這個值是廢棄的,使用windowText代替. |
QPalette::Base | 主要用于文本輸入元件的背景色,但也能用于其他的配色,比如combobox的下拉清單的背景和工具欄控件。它通常是白的或者其他亮的顔色. |
QPalette::AlternateBase | 和交替的行顔色一起作為交替的背景顔色使用 |
QPalette::ToolTipBase | 被用來作為QToolTip和QWhatsThis的背景顔色。Tooltips使用QPalette的非激活顔色組,因為Tooltips不是活躍的視窗. |
QPalette::ToolTipText | 被用來作為QToolTip和QWhatsThis的前景顔色. Tooltips使用QPalette的非激活顔色組,因為Tooltips不是活躍的視窗. |
QPalette::Text | 和Base一起使用的前景色.這通常和windowText相同,這種情況下,他需要跟Window與Base有良好的對比度 |
QPalette::Button | 普通button的背景顔色。這個背景可以與window不同,因為一些風格中按鈕需求不同的背景色 |
QPalette::ButtonText | 與Button顔色一起使用的按鈕前景色(文本顔色) |
QPalette::BrightText | 一個與windowText非常不同的文本顔色,并且此文本顔色與Dark對比鮮明,典型的,用在使用Text或windowText将會繪制出弱對比度文本的地方,比如一個按下的按鈕。注意,此文本顔色還可以用于其他事件而不僅僅是文字,文本顔色通常用于文本,但是使用文本顔色作為行、圖示等的文本顔色角色是非常普遍的 |
一些顔色角色最常使用在3D斜面與陰影效果,所有這些顔色角色都繼承自window,并且使用方式依賴于這種關系。比如,按鈕依賴它來産生吸引人的斜面外觀,主題滾動條依賴mid來變得與window輕微不同
QPalette::Light | 比Button顔色更亮 |
QPalette::Midlight | 在Button與Light之間 |
QPalette::Dark | 比Button更暗 |
QPalette::Mid | 在Button與Dark之間 |
QPalette::Shadow | 一個非常暗的顔色,預設的.Shadow顔色為 Qt::black |
被選擇(被标記)的項有兩個角色:
QPalette::Highlight | 一個表明選擇的項或是目前項的顔色,預設的,Highlight的顔色是 Qt::darkBlue |
QPalette:: HighlightedText | 一個與Highlight對比鮮明的文本顔色,預設的,HighlightedText顔色是 Qt::white |
兩個與超連結有關的角色:
QPalette::Link | 未通路超連結的文本顔色,預設的,Link顔色為 Qt::blue |
QPalette:: LinkVisited | 已通路超連結的文本顔色,預設的,LinkVisited顔色為 Qt::magenta |
注意: 當在Qt中編寫富文本時不建議使用Link與LinkVisited角色,建議使用CSS或者 QTextDocument::setDefaultStyleSheet ()函數改變連接配接的外觀,比如: QTextBrowser browser; QColor linkColor(Qt::red); QString sheet = QString::fromLatin1("a { text-decoration:underline; color: %1 }").arg(linkColor.name()); browser.document()->setDefaultStyleSheet(sheet);
QPalette:: NoRole | 沒有角色,這個特殊的角色經常用于表明一個角色還未指定 |
使用方式: QPalette的關鍵成員函數
void | setBrush ( ColorRole role , const QBrush & brush ) |
void | setBrush ( ColorGroup group , ColorRole role , const QBrush & brush ) |
void | setColor ( ColorGroup group , ColorRole role , const QColor & color ) |
void | setColor ( ColorRole role , const QColor & color ) |
注意:當使用QPalette為視窗設定背景并使用QPalette::Window時,必須在使用QPalette之前,以true調用QWidget成員函數void setAutoFillBackground ( bool enabled ) 使用: QPalette p = widget.palette(); //獲得Widget的調色闆 P.setColor(QPalette::Active,QPalette::WindowText, Qt::blue); p.setColor(QPalette::Inactive, QPalette::WindwoText,Qt::red); widget.setPalette(p); //将顔色資訊設定回widget //widget.h #ifndef WIDGET_H #define WIDGET_H #include <QtGui/QWidget> #include <QPushButton> #include <QLineEdit> #include <QLabel> class Widget : public QWidget { Q_OBJECT QPushButton m_button; QLineEdit m_edit; QLabel m_label; protected slots: void onButtonClicked(); public: Widget(QWidget *parent = 0); ~Widget(); }; #endif // WIDGET_H //widget.cpp #include "Widget.h" #include <QPalette> Widget::Widget(QWidget *parent) :QWidget(parent), m_button(this), m_edit(this), m_label(this) { m_label.move(10, 10); m_label.resize(150, 25); m_label.setText("Test"); m_edit.move(10, 45); m_edit.resize(150, 25); m_button.move(10, 80); m_button.resize(150, 25); m_button.setText("Test"); connect(&m_button, SIGNAL(clicked()), this,SLOT(onButtonClicked())); QPalette p = m_button.palette(); //擷取m_button的調色闆資訊
//設定調色闆對象的激活态時按鈕文本的顔色為紅
p.setColor(QPalette::Active, QPalette::ButtonText, Qt::red);
//設定調色闆對象的非激活态時按鈕文本的顔色為紅
p.setColor(QPalette::Inactive, QPalette::ButtonText, Qt::red);
//将調色闆資訊設定回去,改變m_button的調色闆 m_button.setPalette(p);
p= m_edit.palette(); p.setColor(QPalette::Inactive, QPalette::Highlight, Qt::blue); //設定非激活态的被選中文本背景色為高亮的藍色 p.setColor(QPalette::Inactive, QPalette::HighlightedText, Qt::white);//設定非激活态的被選中文本正文為的白色 m_edit.setPalette(p); } void Widget::onButtonClicked() { QPalette p = m_label.palette(); p.setColor(QPalette::Active, QPalette::WindowText, Qt::green); p.setColor(QPalette::Inactive, QPalette::WindowText, Qt::green); m_label.setPalette(p); } Widget::~Widget() {
}