調色盤(QPalette)

我們這邊使用QPalette改變元件顏色,分別改變窗口的前景、背景色,以及按鍵的顏色:


widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QFrame>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
private:
    QFrame *mainFrame;
    QLabel *myLabel;
    QPushButton *myPushButton;
    QHBoxLayout *mainLayout;
};

#endif 

widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    setWindowTitle(tr("按鍵組"));
    mainFrame = new QFrame(this);
    mainFrame->resize(200,100);
    mainFrame->setAutoFillBackground(true); //需加此行否則無法填充背景
    myLabel = new QLabel();
    myLabel->setText(tr("按鍵:"));
    myLabel->setAlignment(Qt::AlignCenter);
    myPushButton = new QPushButton();
    myPushButton->setText(tr("按鍵內容"));
    mainLayout = new QHBoxLayout(mainFrame);
    mainLayout->addWidget(myLabel);
    mainLayout->addWidget(myPushButton);

    QPalette p1 = mainFrame->palette();
    p1.setColor(QPalette::Window,Qt::yellow);    //變更背景色
    p1.setColor(QPalette::WindowText,Qt::red);   //變更前景色
    mainFrame->setPalette(p1);

    QPalette p2 = myPushButton->palette();
    p2.setColor(QPalette::ButtonText,Qt::blue); //變更按鍵前景色
    myPushButton->setPalette(p2);
    myPushButton->setStyleSheet("background:purple"); 
    //QPalette::Button無法生效,因此改用此方法變更按鍵背景色
}

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.resize(200,100);
    w.show();

    return a.exec();
}

QPalette


不同的元件使用QPalete不同的參數,大概有以下分類:

  • QPalete::Window,窗口元件的背景色。
  • QPalette::WindowText,窗口元件的前景色。
  • QPalette::Base,文本輸入元件(像QtextEdit,QLinedit)的背景色。
  • QPalette::Text,文本輸入元件的前景色。
  • QPalette::Button,按鈕元件的背景色。
  • QPalette::ButtonText,按鈕元件的前景色。