调色板类QPalette

目录

调色板类20210118

实例:设置相关部件的背景色与前景色

代码及详细解释如下:

【palette.cpp】

【palette.h】

【main.cpp】

备注:背景色自动填充


调色板类20210118

实例:设置相关部件的背景色与前景色

新建:Qt Widgets Application

项目名称:Palette

类名:Palette

基类:QDialog

不选择“创建界面”

代码及详细解释如下:

【palette.cpp】

#include "palette.h"

#include <QHBoxLayout>
#include <QGridLayout>
//#include <QVBoxLayout>

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()));         //【1】改变背景颜色

    //-----------------------------------------------------------------------------------
    windowTextLabel = new QLabel(tr("QPalette::WindowText:"));//创建对象:背景色

    windowTextComboBox = new QComboBox;
    fillColorList(windowTextComboBox);

    connect(windowTextComboBox,SIGNAL(activated(int)),this,SLOT(showWindowText())); //【2】改变文字颜色

    //-----------------------------------------------------------------------------------
    buttonLabel = new QLabel(tr("QPalette::Button:"));

    buttonComboBox = new QComboBox;
    fillColorList(buttonComboBox);

    connect(buttonComboBox,SIGNAL(activated(int)),this,SLOT(showButton()));         //【3】改变按钮背景色颜色

    //-----------------------------------------------------------------------------------
    buttonTextLabel = new QLabel(tr("QPalette::ButtonText:"));

    buttonTextComboBox = new QComboBox;
    fillColorList(buttonTextComboBox);

    connect(buttonTextComboBox,SIGNAL(activated(int)),this,SLOT(showButtonText())); //【4】改变按钮文字颜色

    //-----------------------------------------------------------------------------------
    baseLabel = new QLabel(tr("QPalette::Base:"));

    baseComboBox = new QComboBox;
    fillColorList(baseComboBox);

    connect(baseComboBox,SIGNAL(activated(int)),this,SLOT(showBase()));             //【5】改变可输入文本框背景色

    //网格布局
    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(this);
    BottomLayout->addStretch(1);
    BottomLayout->addWidget(OkBtn);
    BottomLayout->addWidget(CancelBtn);         //addWidget()加入控件

    //垂直布局
    QVBoxLayout *mainLayout = new QVBoxLayout(contentFrame);
    mainLayout->addLayout(TopLayout);
    mainLayout->addLayout(BottomLayout);        //addLayout()加入子布局
}

//向下拉列表中插入颜色
void Palette::fillColorList(QComboBox *comboBox)
{
    QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
    QString color;//为循环遍历做准备

    foreach(color,colorList)
    {
        QPixmap pix(QSize(70,20));          //新建一个QPixmap类的对象pix作为显示颜色的图标
        pix.fill(QColor(color));

        comboBox->addItem(QIcon(pix),NULL); //为下拉列表框插入一个条目,并以准备好的pix作为插入条目的图标,名称为NULL,即不显示颜色的名称。
        comboBox->setIconSize(QSize(70,20));//设置图标的尺寸为与pix尺寸相同的长方形(图标默认尺寸为一个方形)
        comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);//下拉列表框的尺寸调整策略为AdjustToContents(符合内容的大小)
    }
}

//改变背景颜色(前景色)
void Palette::showWindow()
{
    QStringList colorList = QColor::colorNames();                       //获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
    QColor color = QColor(colorList[windowComboBox->currentIndex()]);   //获取当前选择的颜色值
    QPalette p = contentFrame->palette();                               //获得右边窗体的调色板信息
    p.setColor(QPalette::Window,color);                                 //设置右边窗体的Window类颜色(背景色)
    //setColor(设置的颜色主题,具体颜色值)

    contentFrame->setPalette(p);
    contentFrame->update();

}

//改变文字颜色(前景色)
void Palette::showWindowText()
{
    QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
    QColor color = QColor(colorList[windowTextComboBox->currentIndex()]);//获取当前选择的颜色值
    QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
    p.setColor(QPalette::WindowText,color); //设置右边窗体的Window类颜色(背景色)
    //setColor(设置的颜色主题,具体颜色值)

    contentFrame->setPalette(p);
    contentFrame->update();
}

//改变按钮背景色颜色
void Palette::showButton()
{
    QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
    QColor color = QColor(colorList[buttonComboBox->currentIndex()]);//获取当前选择的颜色值
    QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
    p.setColor(QPalette::Button,color); //设置右边窗体的Window类颜色(背景色)
    //setColor(设置的颜色主题,具体颜色值)

    contentFrame->setPalette(p);
    contentFrame->update();
}

//改变按钮文字颜色
void Palette::showButtonText()
{
    QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
    QColor color = QColor(colorList[buttonTextComboBox->currentIndex()]);//获取当前选择的颜色值
    QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
    p.setColor(QPalette::ButtonText,color); //设置右边窗体的Window类颜色(背景色)
    //setColor(设置的颜色主题,具体颜色值)

    contentFrame->setPalette(p);
    contentFrame->update();
}

//改变可输入文本框背景色
void Palette::showBase()
{
    QStringList colorList = QColor::colorNames();//获得Qt所有内置名称的颜色名列表,返回类型为字符串列表colorList
    QColor color = QColor(colorList[baseComboBox->currentIndex()]);//获取当前选择的颜色值
    QPalette p = contentFrame->palette();//获得右边窗体的调色板信息
    p.setColor(QPalette::Base,color); //设置右边窗体的Window类颜色(背景色)
    //setColor(设置的颜色主题,具体颜色值)

    contentFrame->setPalette(p);
    contentFrame->update();
}

【palette.h】

#ifndef PALETTE_H
#define PALETTE_H

#include <QDialog>

//#include <QFrame>
#include <QLabel>
#include <QComboBox>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>

class Palette : public QDialog
{
    Q_OBJECT

public:
    Palette(QWidget *parent = 0);
    ~Palette();

    void createCtrlFrame();         //窗体左边:创建颜色选择区
    void createContentFrame();      //窗体右边:显示所选颜色对窗体外观的改变
    void fillColorList(QComboBox *);//向下拉列表中插入颜色

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;

private slots:
    void showWindow();
    void showWindowText();
    void showButton();
    void showButtonText();
    void showBase();

};

#endif // PALETTE_H

【main.cpp】

#include "palette.h"                //使用哪个类就必须把包含该类的头文件引用过来(*.h文件中包含了相应类的定义)
#include <QApplication>             //每个使用[Qt图形化应用程序]中都必须使用一个QApplication对象
                                    //QApplication管理各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等
int main(int argc, char *argv[])    //这里是应用程序的入口。几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。
                                    //所有Qt程序必须有且只有一个main()函数。argc是命令行变量的数量,argv是命令行变量的数组。
{
    QApplication a(argc, argv);     // a是创建的QApplication类的对象,用来处理命令行变量。所有被Qt识别的命令行参数都将从argv中移去,argc也因此减少

    Palette w;                      //创建Palette类的对象(包含该类头文件)
    w.show();                       //窗口部件可见

    return a.exec();                //main()函数将控制权交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。
                                    //exec()函数中,Qt接收并处理用户和系统的事件,并且将他们传递给适当的窗口部件。
}

备注:背景色自动填充

        一定要加上这句话:setAutoFillBackground()

PySide6中的调色板(Palette)用于定义窗口和窗口中控件的颜色。调色板QPalette,可以通过设置不同的颜色组(Color Group)和颜色角色(Color Role)来定义调色板。 下面是一个简单的例子: ```python from PySide6.QtGui import QColor, QPalette from PySide6.QtWidgets import QApplication, QLabel, QWidget app = QApplication([]) widget = QWidget() # 创建调色板对象 palette = QPalette() # 设置窗口背景颜色 palette.setColor(QPalette.Window, QColor(53, 53, 53)) widget.setPalette(palette) # 创建标签并设置文本和前景色 label = QLabel("Hello, World!") palette.setColor(QPalette.WindowText, QColor(255, 255, 255)) label.setPalette(palette) widget.show() app.exec() ``` 在上面的例子中,我们创建了一个调色板对象,并设置了窗口背景颜色和标签的前景色。 调色板中的颜色组包括窗口(Window)、按钮(Button)、文本(Text)等,颜色角色包括前景色(WindowText)、背景色(Window)、文本颜色(ButtonText)等。 除了使用默认的颜色组和颜色角色外,我们还可以使用自定义的颜色组和颜色角色。例如,我们可以通过以下方式创建一个自定义的颜色组: ```python # 创建自定义颜色组 customColorGroup = QPalette.ColorGroup.Normal palette.setColor(customColorGroup, QPalette.ColorRole.Foreground, QColor(255, 0, 0)) ``` 在这个例子中,我们创建了一个自定义颜色组,并设置了其前景色为红色。 更多关于PySide6调色板的使用方法可以参考官方文档:https://doc.qt.io/qtforpython/PySide6/QtGui/QPalette.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢奕冰2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值