概述
问题描述: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);
}
经过本人亲自调试,已经可以使用了,希望能帮到大家。下面是我的程序运行效果:
点击任何一种颜色,设置成功.
最后
以上就是称心小土豆为你收集整理的qt调色板(palette的运用)的全部内容,希望文章能够帮你解决qt调色板(palette的运用)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复