Sat, 08 Apr 2023 15:08:19 +0300
Change color edit coloring to use only stylesheets to colorise the line edit only
#include <QColorDialog> #include <QHBoxLayout> #include "widgets/colorbutton.h" ColorButton::ColorButton(const QColor& color, QWidget* parent) : ColorButton{parent} { this->setColor(color); } ColorButton::ColorButton(QWidget* parent) : QWidget{parent}, lineEdit{new QLineEdit{this}}, button{new QPushButton{"…", this}} { auto*const layout = new QHBoxLayout{}; layout->addWidget(this->lineEdit); layout->addWidget(this->button); layout->setStretch(0, 1); layout->setStretch(1, 0); this->setLayout(layout); connect(this->button, &QPushButton::clicked, [&](){ const QColor color = QColorDialog::getColor(this->color(), this->parentWidget()); if (color.isValid()) { this->setColor(color); } }); connect(this->lineEdit, &QLineEdit::textChanged, [&]{ const QColor color = this->color(); const qreal lightness = color.lightnessF(); const QColor foreground = lightness < 0.4 ? Qt::white : Qt::black; this->setStyleSheet( QStringLiteral("QLineEdit{background-color: %1; color: %2;}") .arg(color.name()) .arg(foreground.name())); Q_EMIT this->colorChanged(this->color()); }); this->setColor(Qt::black); } QColor ColorButton::color() const { return QColor{this->lineEdit->text()}; } void ColorButton::setColor(const QColor& color) { if (color.isValid() and this->color() != color) { this->lineEdit->setText(color.name()); } }