日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

学习QT之调色板(QPalette)

發布時間:2024/3/13 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习QT之调色板(QPalette) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在實際應用中,經常需要改變某個控件的顏色外觀,如背景、文字顏色等。Qt提供的調色板類QPalette專門用于管理對話框的外觀顯示。QPalette類相當于對話框或控件的調色板,它管理著控件或窗體的所有顏色信息。每個窗體或控件都包含一個QPalette對象,在顯示時,按照它的QPalette對象中對各部分各狀態下的顏色描述進行繪制。

QPalette有兩個基本的概念:ColorGroup、ColorRole

ColorGroup說明
QPalette::Active獲得焦點的狀態
QPalette::InActive未獲得焦點的狀態
QPalette::Disable不可用狀態

:其中,Active狀態與InActive狀態在通常情況下,顏色顯示是一致的,也可以根據需要設置為不一樣的顏色。

ColorRole說明
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_H

palette.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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。