学习QT之调色板(QPalette)
生活随笔
收集整理的這篇文章主要介紹了
学习QT之调色板(QPalette)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在實際應用中,經常需要改變某個控件的顏色外觀,如背景、文字顏色等。Qt提供的調色板類QPalette專門用于管理對話框的外觀顯示。QPalette類相當于對話框或控件的調色板,它管理著控件或窗體的所有顏色信息。每個窗體或控件都包含一個QPalette對象,在顯示時,按照它的QPalette對象中對各部分各狀態下的顏色描述進行繪制。
QPalette有兩個基本的概念:ColorGroup、ColorRole
| QPalette::Active | 獲得焦點的狀態 |
| QPalette::InActive | 未獲得焦點的狀態 |
| QPalette::Disable | 不可用狀態 |
注:其中,Active狀態與InActive狀態在通常情況下,顏色顯示是一致的,也可以根據需要設置為不一樣的顏色。
| QPalette::Window | 窗體部件的背景色 |
| QPalette::WindowText | 窗體部件的前景色 |
| QPalette::Base | 文本輸入窗口部件(比如QTextEdit,QLinedit,QPlainTextEdit等)的背景色 |
| QPalette::Text | 與QPalette::Base一塊使用,指文本輸入窗口部件的前景色 |
| QPalette::Button | 按鈕窗口部件的背景色 |
| QPalette::ButtonText | 指按鈕窗口部件的前景色 |
| QPalette::Highlight | 設置文字高亮時的背景顏色 |
| QPalette::HighlightedText | 設置文字高亮時的顏色 |
| QPalette::Link | 超鏈接文字顏色 |
| QPalette::LinkVisted | 超鏈接文字訪問后的顏色 |
QPalette類使用最多、最重要的函數是setColor()函數,其原型如下:
void QPalette::setColor(ColorGroup group,ColorRole role,const QColor & color);在對主題顏色進行設置的同時,還區分了狀態,即對某個主題在某個狀態下的顏色進行了設置;
void QPalette::setColor(ColorRole role,const QColor & color);只對某個主題的顏色進行設置,并不區分狀態。
QPalette類同時還提供了setBrush()函數,通過畫刷的設置對顯示進行更改,這樣就有可能使用圖片而不是單一的顏色來對主題進行填充。
使用示例
QPalette p; p.setColor(QPalette::Window,color);//p.setBrush(QPalette::Window,brush); xxx->setPalette(p);以下通過一個實例來介紹一下它的使用:
一、運行結果
二、詳細代碼
palette.h
#ifndef PALETTE_H #define PALETTE_H#include <QDialog> #include <QComboBox> #include <QLabel> #include <QTextEdit> #include <QPushButton> #include <QLineEdit>class Palette : public QDialog {Q_OBJECTpublic:Palette(QWidget *parent = 0);~Palette();void createCtrlFrame(); //完成窗體左半部分顏色選擇區的創建void createContentFrame(); //完成窗體右半部分的創建void fillColorList(QComboBox *); //完成顏色下拉列表框中插入顏色的工作private slots:void showWindow();void showWindowText();void showButton();void showButtonText();void showBase();private:QFrame *CtrlFrame; //顏色選擇面板QLabel *windowLabel;QComboBox *windowComboBox;QLabel *windowTextLabel;QComboBox *windowTextComboBox;QLabel *buttonLabel;QComboBox *buttonComboBox;QLabel *buttonTextLabel;QComboBox *buttonTextComboBox;QLabel *baseLabel;QComboBox *baseComboBox;QFrame *contentFrame; //具體顯示面板QLabel *label1;QComboBox *comboBox1;QLabel *label2;QLineEdit *lineEdit2;QTextEdit *textEdit;QPushButton *okBtn;QPushButton *CancelBtn; };#endif // PALETTE_Hpalette.cpp
#include "palette.h" #include <QHBoxLayout> #include <QGridLayout>Palette::Palette(QWidget *parent): QDialog(parent) {createCtrlFrame();createContentFrame();QHBoxLayout *mainLayout = new QHBoxLayout(this);mainLayout->addWidget(CtrlFrame);mainLayout->addWidget(contentFrame); }Palette::~Palette() {}void Palette::createCtrlFrame() {CtrlFrame = new QFrame; //顏色選擇面板windowLabel = new QLabel(tr("QPalette::Window: "));windowComboBox = new QComboBox;fillColorList(windowComboBox); //向下拉列表框中插入各種不同的顏色選項connect(windowComboBox,SIGNAL(activated(int)),this,SLOT(showWindow()));windowTextLabel = new QLabel(tr("QPalete::WindowText: "));windowTextComboBox = new QComboBox;fillColorList(windowTextComboBox);connect(windowTextComboBox,SIGNAL(activated(int)),this,SLOT(showWindowText()));buttonLabel = new QLabel(tr("QPalette::Button: "));buttonComboBox = new QComboBox;fillColorList(buttonComboBox);connect(buttonComboBox,SIGNAL(activated(int)),this,SLOT(showButton()));buttonTextLabel = new QLabel(tr("QPalette::ButtonText: "));buttonTextComboBox = new QComboBox;fillColorList(buttonTextComboBox);connect(buttonTextComboBox,SIGNAL(activated(int)),this,SLOT(showButtonText()));baseLabel = new QLabel(tr("QPalette::Base: "));baseComboBox = new QComboBox;fillColorList(baseComboBox);connect(baseComboBox,SIGNAL(activated(int)),this,SLOT(showBase()));QGridLayout *mainLayout = new QGridLayout(CtrlFrame);mainLayout->setSpacing(20);mainLayout->addWidget(windowLabel,0,0);mainLayout->addWidget(windowComboBox,0,1);mainLayout->addWidget(windowTextLabel,1,0);mainLayout->addWidget(windowTextComboBox,1,1);mainLayout->addWidget(buttonLabel,2,0);mainLayout->addWidget(buttonComboBox,2,1);mainLayout->addWidget(buttonTextLabel,3,0);mainLayout->addWidget(buttonTextComboBox,3,1);mainLayout->addWidget(baseLabel,4,0);mainLayout->addWidget(baseComboBox,4,1); }void Palette::createContentFrame() {contentFrame = new QFrame; //具體顯示面板label1 = new QLabel(tr("請選擇一個值: "));comboBox1 = new QComboBox;label2 = new QLabel(tr("請輸入字符串: "));lineEdit2 = new QLineEdit;textEdit = new QTextEdit;QGridLayout *TopLayout = new QGridLayout;TopLayout->addWidget(label1,0,0);TopLayout->addWidget(comboBox1,0,1);TopLayout->addWidget(label2,1,0);TopLayout->addWidget(lineEdit2,1,1);TopLayout->addWidget(textEdit,2,0,1,2);okBtn = new QPushButton(tr("確認"));CancelBtn = new QPushButton(tr("取消"));QHBoxLayout *ButtomLayout = new QHBoxLayout;ButtomLayout->addStretch(1);ButtomLayout->addWidget(okBtn);ButtomLayout->addWidget(CancelBtn);QVBoxLayout *mainLayout = new QVBoxLayout(contentFrame);mainLayout->addLayout(TopLayout);mainLayout->addLayout(ButtomLayout);okBtn->setAutoFillBackground(true); //允許自動填充CancelBtn->setAutoFillBackground(true);contentFrame->setAutoFillBackground(true); }void Palette::fillColorList(QComboBox *comboBox) {QStringList colorList = QColor::colorNames();QString color;foreach (color, colorList) {QPixmap pix(QSize(70,20));pix.fill(QColor(color));comboBox->addItem(QIcon(pix),NULL);comboBox->setIconSize(QSize(70,20));comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);} }void Palette::showWindow() {//獲得當前選擇的顏色值QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[windowComboBox->currentIndex()]);QPalette p = contentFrame->palette();p.setColor(QPalette::Window,color);contentFrame->setPalette(p);contentFrame->update(); }void Palette::showWindowText() {QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[windowComboBox->currentIndex()]);QPalette p = contentFrame->palette();p.setColor(QPalette::WindowText,color);contentFrame->setPalette(p); }void Palette::showButton() {QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[windowComboBox->currentIndex()]);QPalette p = contentFrame->palette();p.setColor(QPalette::Button,color);contentFrame->setPalette(p);contentFrame->update(); }void Palette::showButtonText() {QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[windowComboBox->currentIndex()]);QPalette p = contentFrame->palette();p.setColor(QPalette::ButtonText,color);contentFrame->setPalette(p); }void Palette::showBase() {QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[windowComboBox->currentIndex()]);QPalette p = contentFrame->palette();p.setColor(QPalette::Base,color);contentFrame->setPalette(p); }總結
以上是生活随笔為你收集整理的学习QT之调色板(QPalette)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Deepin系统初体验指南:从安装到开发
- 下一篇: GEE学习笔记(基础篇)更新中