QT 在QTabWidget中設置一些調色板


這次所做的項目中需要用到如下功能,點擊tableWidget中的子項,將會彈出顏色選值對話框,實現子項的改變,如下圖所示:

1、首先,將自己定制的調色板放入tableWidget中

for (int i = 0; i < 3; i++)
{
	for (int j = 0; j < 3; j++)
	{
		myPushButton = new MyQPushButton(this);
		ui.tableWidget->setCellWidget(i, j, myPushButton); //插入第i行,j列   
	}
}
    

2、頭文件

#pragma once

#include <QObject>
#include <QPushButton>
#include <QColorDialog>
#include <QMouseEvent>
class MyQPushButton : public QPushButton    //公有繼承QPushButton
{
    Q_OBJECT

public:
    MyQPushButton(QWidget *parent);
    ~MyQPushButton();
  
void setColor();//設置隨機顏色   void setColor(QColor color);//設置特定顏色   QColor getColor() const;//獲取顏色 private slots: void choiceColor(void); //方法一,通過信號與槽連接 protected: void mousePressEvent(QMouseEvent *event);  //方法二、通過重寫鼠標按下事件 };

 

3、源文件

#include "MyQPushButton.h"

MyQPushButton::MyQPushButton(QWidget *parent): QPushButton(parent) {   //connect(this, SIGNAL(clicked()), this, SLOT(choiceColor(void)));    //方法1   /*下面兩行代碼必須有,否則效果會有差異*/   setAutoFillBackground(true);  //設置自動填充背景   setFlat(true);  //設置成平面 } MyQPushButton::~MyQPushButton() { } /*點擊本身響應的槽函數*/ void MyQPushButton::choiceColor(void) {   QColor color = QColorDialog::getColor(Qt::white, this);  //調出顏色選擇器對話框   QPalette pal;  //此類包含每個小部件狀態的顏色組   pal.setColor(QPalette::Button, color);  //QPalette::Button,  ColorRole enum定義了當前gui中使用的不同符號顏色角色。   setPalette(pal); } /*鼠標按下事件*/ void MyQPushButton::mousePressEvent(QMouseEvent *event) {   if (event->button() == Qt::LeftButton)   {   QPalette pal;   pal.setColor(QPalette::Button, QColorDialog::getColor());   this->setPalette(pal);   } } /*設置隨機顏色*/  void MyQPushButton::setColor() { QColor color(rand() % 256, rand() % 256, rand() % 256);//產生一組隨機的rgb值 QPalette pal; pal.setColor(QPalette::Button, color); setPalette(pal); } /*設置給定的顏色*/ void MyQPushButton::setColor(QColor color) { QPalette pal; pal.setColor(QPalette::Button, color); setPalette(pal); } /*獲取當前顏色*/ QColor MyQPushButton::getColor() const { return this->palette().color(QPalette::Button); }

 

4、獲取當前按鈕的顏色。
QColor theColor=((MyQPushButton*)ui.tableWidget->cellWidget(i, j))->palette().color(QPalette::Button);//cellWidget(i, j)的返回值是QWidget*,所以一定要注意使用MyQPushButton*進行類的強制轉化(不能使用MyQPushButton)。
補充:獲取顏色列表,可參考:https://blog.csdn.net/rl529014/article/details/51589096

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM