使用QColorDialog颜色编辑选取对话框来拾取颜色,来动态改变界面整体的颜色风格,简单实例

最近在做一个项目,需要把客户端界面的颜色改变成为客户需要的颜色,但盖起来相当麻烦,于是就想到QColorDialog来拾取颜色,动态的改变界面的颜色,但是这种方法只适用客户端开始设计的时候就随之引入。下面是代码:

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QColorDialog>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void ShowColor(QColor);
    void SetColor(QColor);
    void SetColor_1();
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QColor m_color;//记录界面初始颜色
    QColor m_selectedColor;//记录按OK键后选中的颜色
};

#endif // WIDGET_H

Widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPalette>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //获取当前窗口的背景色
    QPalette p = this->palette();
    QBrush brush = p.background();
    m_color = brush.color();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::ShowColor(QColor color)
{
    QPalette palette;
    palette = this->palette();
    palette.setBrush(QPalette::Window,QBrush(color));
    this->setAutoFillBackground(true);
    this->setPalette(palette);
}

void Widget::SetColor(QColor color)
{
    if(color.isValid())
    {
        qDebug()<<"SetColor";
        QPalette palette;
        palette = this->palette();
        palette.setBrush(QPalette::Window,QBrush(color));
        this->setAutoFillBackground(true);
        this->setPalette(palette);
        m_selectedColor = color;
    }
}

void Widget::SetColor_1()
{

    if(m_selectedColor.isValid())
    {
        qDebug()<<"SetColor_1";
        QPalette palette;
        palette = this->palette();
        palette.setBrush(QPalette::Window,QBrush(m_selectedColor));
        this->setAutoFillBackground(true);
        this->setPalette(palette);
        m_color = m_selectedColor;
    }
    else
    {
        qDebug()<<"SetColor_2";
        QPalette palette;
        palette = this->palette();
        palette.setBrush(QPalette::Window,QBrush(m_color));
        this->setAutoFillBackground(true);
        this->setPalette(palette);
    }
}

void Widget::on_pushButton_clicked()
{
    QColorDialog *m_pColor = new QColorDialog(this);
    m_pColor->setCurrentColor(m_color);
    m_pColor->show();
    connect(m_pColor,SIGNAL(currentColorChanged(QColor)),this,SLOT(ShowColor(QColor)));//显示当前选中颜色的效果
    connect(m_pColor,SIGNAL(colorSelected(QColor)),this,SLOT(SetColor(QColor)));//OK信号连接
    //rejected信号会在QColorDialog框关闭或按Cancel按钮时发出,可通过绑定该信号来进行Cancel信号过滤
    connect(m_pColor,SIGNAL(rejected()),this,SLOT(SetColor_1()));
}

效果如下

这里写图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值