天天看點

Qt中的調色闆QPalette

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() {

}

繼續閱讀