qt调色板(palette的运用)

  问题描述:qt的GUI界面上有一个QLineEdit,有一个按钮QPushbutton,如下图


现在要完成的功能是,点击按钮,弹出一个调色板,并在调色板中编辑颜色,将该颜色设置为lineedit的背景色。我在网上找了N种办法都没解决问题,后来只有老老实实的去看qt文档,后来终于找到了一种解决办法,现在分享一下我的解决办法。

本问题要解决的难题是:1、怎么弹出调色板(这个网上很多答案)?2、当调色板点击ok后,怎么获得调色板的rgb值?(这个是问题的难点,如果不去读qt帮助文档的话,根本找不到解决办法,至少我在百度上没搜到解决方案)好了,闲话少说,直接上代码。

首先声明一个类CDM_setStyleSheet,如下:

.h文件

#ifndef CDM_SETSTYLESHEET_H
#define CDM_SETSTYLESHEET_H
#include <QObject>
#include <QWidget>
#include <QPalette>
#include <QColor>
#include <QLineEdit>
#include <QPushButton>
#include <QColorDialog>
#include <QString>
class CDM_setStyleSheet:public QWidget
{
Q_OBJECT


public:
CDM_setStyleSheet(QLineEdit*,QPushButton*);//构造函数,传入指针,方便操作
~CDM_setStyleSheet();
private slots:
void slot_getColor(QColor);//获取调色板rgb值
void slot_OpenColorPad();//打开调色板
void slot_setBackColor();//设置背景色
signals:
void signal_changeBackColor();//改变背景色信号函数(这个是最关键的信号函数,调色板点击ok后就会发射这个信号,参考qt帮助文档)
private:
QColorDialog *m_pColorDialog;//调色板显示类
QPalette m_myPalette;//paltte对象
int m_red;//颜色的三色,红绿蓝
int m_green;
int m_blue;
QLineEdit *m_lineEdit;//编辑框
QPushButton *m_pushButton;//按钮
};
#endif // CDM_SETSTYLESHEET_H

可以看到,类的构造函数传入两个指针,这是封装成接口的类,以后在其他类,直接调用传入参数就行了。三个槽函数和一个信号函数。

.cpp文件

#include "cdm_setstylesheet.h"

CDM_setStyleSheet::CDM_setStyleSheet(QLineEdit* vLineEdit,QPushButton* vPushButton)


{
   m_lineEdit = vLineEdit;
   m_pushButton = vPushButton;
   m_pColorDialog = NULL;
   connect(m_pushButton,SIGNAL(clicked()),this,SLOT(slot_OpenColorPad()));
   connect(this,SIGNAL(signal_changeBackColor()),this,SLOT(slot_setBackColor()));//槽函数slot_setBackColor是相应调色板ok事件的槽函数,也是本程序的关键
}


CDM_setStyleSheet::~CDM_setStyleSheet()
{
if(NULL !=m_pColorDialog){delete m_pColorDialog;m_pColorDialog=NULL;}
}

//获取cor的RGB值,并发射信号signal_changeBackColor()
void CDM_setStyleSheet::slot_getColor( QColor cor)
{
m_red=cor.red();
m_green=cor.green();
m_blue=cor.blue();
emit signal_changeBackColor();
}

//打开调色板槽函数
void CDM_setStyleSheet::slot_OpenColorPad()
{
m_pColorDialog = new QColorDialog;
connect(m_pColorDialog,SIGNAL(colorSelected(QColor)),this,SLOT(slot_getColor(QColor)));
m_myPalette = m_lineEdit->palette();
m_pColorDialog->exec();

}

//更爱lineEdit的背景色
void CDM_setStyleSheet::slot_setBackColor()
{


QString colorStr=QString("background-color:rgb(%1,%2,%3);").arg(m_red).arg(m_green).arg(m_blue);
m_lineEdit->setStyleSheet(colorStr);
}

经过本人亲自调试,已经可以使用了,希望能帮到大家。下面是我的程序运行效果:


点击任何一种颜色,设置成功.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章