@Griglapidus
C++/Qt

Почему кастомный виджет имеет больший размер чем его содержимое?

Был создан простой виджет для управления цветом:
class ColorInput : public QWidget
{
  Q_OBJECT
public:
  explicit ColorInput(QWidget *parent = nullptr);

  QColor getColor();
  QString getColorStr();

signals:
  void colorChanged(QColor color);

public slots:
  void setColor(QColor color);
  void setColor(QString color);

private slots:
  void chooseColor();

private:
  QColor m_color;
  QLineEdit *m_edit = nullptr;
  QPushButton *m_btn = nullptr;
};

ColorInput::ColorInput(QWidget *parent) :
  QWidget(parent),
  m_edit(new QLineEdit(this)),
  m_btn(new QPushButton(this))
{
  QHBoxLayout *layout = new QHBoxLayout(this);
  layout->addWidget(m_edit);
  layout->addWidget(m_btn);
  setLayout(layout);

  m_btn->setIcon(m_btn->style()->standardIcon(QStyle::SP_ArrowLeft));

  QObject::connect(m_edit, SIGNAL(textChanged(QString)), this, SLOT(setColor(QString)));
  QObject::connect(m_btn, SIGNAL(pressed()), this, SLOT(chooseColor()));
  setColor(QString(""));
  setBaseSize(200, 20);
}

QColor ColorInput::getColor()
{
  return m_color;
}

QString ColorInput::getColorStr()
{
  return m_color.name();
}

void ColorInput::setColor(QColor color)
{
  m_color = color;
  m_edit->setText(m_color.name());
  QColor textColor(255 - m_color.red(), 255 - m_color.green(), 255 - m_color.blue());
  QSignalBlocker blocker(m_edit);
  m_edit->setStyleSheet(QString("color: %1;"
                          "background-color: %2;"
                          "selection-color: black;"
                          "selection-background-color: white;").arg(textColor.name()).arg(m_color.name()));
  emit colorChanged(m_color);
}

void ColorInput::setColor(QString color)
{
  m_color.setNamedColor(color);
  if(!m_color.isValid()) m_color = QColor(Qt::black);
  setColor(m_color);
}

void ColorInput::chooseColor()
{
  QColor newColor = QColorDialog::getColor(m_color, this, "Выбор цвета");
  if(newColor != m_color) setColor(newColor);
}


при попытке добавить его на QFormLayout его размер оказался больше базовых виджетов. Как будто у него задан некий отступ.
Выглядит это так:
60505b7ca5a52863254719.png

В первой все собрано на layout'ах а во второй новый виджет.
Проблема ощущается простой, ноя не понимаю в какую стонону копать.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Decart IT-production Москва
от 240 000 до 300 000 ₽
CodeX Нижний Новгород
от 30 000 до 80 000 ₽
CodeX Нижний Новгород
от 30 000 до 80 000 ₽
26 нояб. 2024, в 13:05
450 руб./в час
26 нояб. 2024, в 12:58
30000 руб./за проект
26 нояб. 2024, в 12:56
1500 руб./в час