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);
}

經過本人親自調試,已經可以使用了,希望能幫到大家。下面是我的程序運行效果:


點擊任何一種顏色,設置成功.




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