Вы можете легко сделать свою собственную кнопку выбора цвета, подклассифицировав QPushButton и переопределив ее paintEvent
. Это должно дать вам красивую кнопку цвета. Я бы попробовал что-то вроде следующего.
colorbutton.h:
#ifndef COLORBUTTON_H
#define COLORBUTTON_H
#include <QtGui>
class ColorButton : public QPushButton
{
Q_OBJECT
public:
explicit ColorButton(const QColor & color = Qt::black, QWidget *parent = 0);
QColor getColor();
signals:
void colorChanged(QColor);
public slots:
void changeColor(const QColor &);
void chooseColor();
void paintEvent(QPaintEvent *event);
private:
QColor currentColor;
};
#endif // COLORBUTTON_H
colorbutton.cpp:
#include "colorbutton.h"
ColorButton::ColorButton(const QColor & color, QWidget *parent) :
QPushButton(parent)
{
this->setMinimumWidth(50);
currentColor = color;
connect(this, SIGNAL(clicked()), this, SLOT(chooseColor()));
}
QColor ColorButton::getColor()
{
return currentColor;
}
void ColorButton::changeColor(const QColor & color)
{
currentColor = color;
colorChanged(currentColor);
}
void ColorButton::chooseColor()
{
QColor color = QColorDialog::getColor(currentColor, this);
if (color.isValid())
changeColor(color);
}
void ColorButton::paintEvent(QPaintEvent *event)
{
QPushButton::paintEvent(event);
int colorPadding = 5;
QRect rect = event->rect();
QPainter painter( this );
painter.setBrush( QBrush( currentColor ) );
painter.setPen("#CECECE");
rect.adjust(colorPadding, colorPadding, -1-colorPadding, -1-colorPadding);
painter.drawRect(rect);
}
Обратите внимание, что большая часть этого была сделана на месте и еще не была полностью настроена.