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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

QT学习:调色板

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

在實際應用中,經常需要改變某個控件的顏色外觀,如背景、文字顏色等。Qt提供的調色板類QPalette專門用于管理對話框的外觀顯示。QPalette類相當于對話框或控件的調色板,它管理著控件或窗體的所有顏色信息。每個窗體或控件都包含一個QPalette對象,在顯示時,按照它的QPalette對象中對各部分各狀態下的顏色的描述進行繪制。
在介紹具體用法時我們先來了解以下基本概念,QPalette類有兩個基本的概念: 一個是 ColorGroup另一個是ColorRole。其中,ColorGroup 指的是以下三種不同的狀態。
(1)QPalette::Active:獲得焦點的狀態。
(2)QPalette:Inactive:未獲得焦點的狀態。
(3)QPalette:Disable:不可用狀態。
其中,Active 狀態與Inactive狀態在通常情況下,顏色顯示是一致的, 也可以根據需要設置為不一樣 的顏色。
ColorRole指的是顏色主題,即對窗體中不同部位顏色的分類。例如,Plte:Window是指背景色,QPalette::WindowText 是指前景色。
QPalette類使用最多、最重要的函數是setColor()函數,此外QPalette類同時還提供了setBrush()函數, 通過畫刷的設置對顯示進行更改,這樣就有可能使用圖片而不僅是單一的顏色來對主題進行填充。Qt之前的版本中有關背景色設置的函數如setBackgroundColor()在 Qt5中都被廢止,統一由QPalette類進行管理。
接下來我們用代碼來熟悉具體用法:
頭文件為:

#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

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); }void Palette::createCtrlFrame() {ctrlFrame =new QFrame; //顏色選擇面板windowLabel =new QLabel(tr("QPalette::Window: "));windowComboBox =new QComboBox; //創建一個QComboBox對象fillColorList(windowComboBox); //向下拉列表框中插入各種不同的顏色選項connect(windowComboBox,SIGNAL(activated(int)),this,SLOT(ShowWindow()));//連接下拉列表框的active()信號與高邊背景色的槽函數ShowWindow()windowTextLabel =new QLabel(tr("QPalette::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 *BottomLayout =new QHBoxLayout;BottomLayout->addStretch(1);BottomLayout->addWidget(OkBtn);BottomLayout->addWidget(CancelBtn);QVBoxLayout *mainLayout =new QVBoxLayout(contentFrame);mainLayout->addLayout(TopLayout);mainLayout->addLayout(BottomLayout); }void Palette::ShowWindow() {//獲得當前選擇的顏色值QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[windowComboBox->currentIndex()]);QPalette p = contentFrame->palette(); //獲得右部窗體contentFrame的調色板信息p.setColor(QPalette::Window,color); //設置窗體的Window類顏色,即背景色//把修改后的調色板信息應用到contentFrame窗體中,更新顯示contentFrame->setPalette(p);contentFrame->update(); }void Palette::ShowWindowText() {QStringList colorList = QColor::colorNames();QColor color = colorList[windowTextComboBox->currentIndex()];QPalette p = contentFrame->palette();p.setColor(QPalette::WindowText,color);contentFrame->setPalette(p); }void Palette::ShowButton() {QStringList colorList = QColor::colorNames();QColor color =QColor(colorList[buttonComboBox->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[buttonTextComboBox->currentIndex()]);QPalette p =contentFrame->palette();p.setColor(QPalette::ButtonText,color);contentFrame->setPalette(p); }void Palette::ShowBase() {QStringList colorList = QColor::colorNames();QColor color = QColor(colorList[baseComboBox->currentIndex()]);QPalette p = contentFrame->palette();p.setColor(QPalette::Base,color);contentFrame->setPalette(p); }void Palette::fillColorList(QComboBox *comboBox) {QStringList colorList = QColor::colorNames(); //獲得qt所有內置名稱的顏色名列表QString color; foreach(color,colorList) //對顏色名列表進行遍歷{QPixmap pix(QSize(70,20)); //新建對象作為顯示顏色的圖標pix.fill(QColor(color)); //為pix填充當前遍歷的顏色comboBox->addItem(QIcon(pix),NULL); //為下拉列表框插入條目comboBox->setIconSize(QSize(70,20)); //設置圖標尺寸comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);//設置下拉列表的尺寸調整策略} }Palette::~Palette() {}

main函數內容為:

#include "palette.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Palette w;w.show();return a.exec(); }

運行結果如下圖所示:

總結

以上是生活随笔為你收集整理的QT学习:调色板的全部內容,希望文章能夠幫你解決所遇到的問題。

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