mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-10-07 15:23:22 +02:00
69 lines
1.5 KiB
C++
69 lines
1.5 KiB
C++
|
#include <QStylePainter>
|
||
|
#include <QStyleOptionComboBox>
|
||
|
#include <QMouseEvent>
|
||
|
#include <QColorDialog>
|
||
|
#include <QComboBox>
|
||
|
#include "colorbox.h"
|
||
|
|
||
|
|
||
|
ColorBox::ColorBox(QWidget *parent) : QWidget(parent)
|
||
|
{
|
||
|
_color = Qt::red;
|
||
|
setSizePolicy(QSizePolicy::QSizePolicy::Minimum, QSizePolicy::Fixed);
|
||
|
}
|
||
|
|
||
|
QSize ColorBox::sizeHint() const
|
||
|
{
|
||
|
static QSize size;
|
||
|
if (size.isValid())
|
||
|
return size;
|
||
|
|
||
|
QComboBox cb;
|
||
|
size = cb.sizeHint();
|
||
|
return size;
|
||
|
}
|
||
|
|
||
|
void ColorBox::paintEvent(QPaintEvent *event)
|
||
|
{
|
||
|
Q_UNUSED(event);
|
||
|
|
||
|
QStylePainter painter(this);
|
||
|
|
||
|
QStyleOptionComboBox option;
|
||
|
option.initFrom(this);
|
||
|
|
||
|
#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
|
||
|
painter.setBrush(_color);
|
||
|
painter.drawPrimitive(QStyle::PE_Frame, option);
|
||
|
#else // Q_OS_MAC || Q_OS_WIN32
|
||
|
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
|
||
|
painter.setBrush(_color);
|
||
|
painter.drawRect(event->rect().adjusted(-1, -1, 0, 0));
|
||
|
painter.drawPrimitive(QStyle::PE_FrameLineEdit, option);
|
||
|
#else // QT 5
|
||
|
option.palette.setBrush(QPalette::Base, _color);
|
||
|
painter.drawPrimitive(QStyle::PE_FrameLineEdit, option);
|
||
|
#endif // QT 5
|
||
|
#endif // Q_OS_MAC || Q_OS_WIN32
|
||
|
}
|
||
|
|
||
|
void ColorBox::mousePressEvent(QMouseEvent *event)
|
||
|
{
|
||
|
if (event->button() != Qt::LeftButton)
|
||
|
return;
|
||
|
|
||
|
QColor color = QColorDialog::getColor(_color, this, QString(),
|
||
|
QColorDialog::ShowAlphaChannel);
|
||
|
if (color.isValid()) {
|
||
|
_color = color;
|
||
|
update();
|
||
|
emit colorChanged(_color);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ColorBox::setColor(const QColor &color)
|
||
|
{
|
||
|
_color = color;
|
||
|
update();
|
||
|
}
|