#include #include BCValueEditor::BCValueEditor( QWidget *parent ) : QWidget(parent) { setupUi(this); // wir wollen ja modern sein _slider->setStyle(new BCSliderStyle()); setAutoFillBackground(true); QSizePolicy sp = _commitButton->sizePolicy(); sp.setRetainSizeWhenHidden(true); // <--- Das ist der magische Schalter _commitButton->setSizePolicy(sp); // Wenn Slider bewegt wird -> Signal nach außen senden connect(_slider, &QSlider::valueChanged, this, [this](int val) { emit valueChanged(val); }); // Wenn Reset gedrückt wird -> Slider auf 0 (löst auch valueChanged aus) connect(_commitButton, &QPushButton::clicked, this, [this]() { emit valueCommited( value() ); }); } int BCValueEditor::value() const { return _slider->value(); } void BCValueEditor::setValueAndRange( const BCValue::ValueRange& params ) { _slider->setRange( params.min, params.max); // Block Signals verhindern Endlosschleifen, falls das Model // das Widget während des Updates neu setzt (passiert manchmal bei Live-Updates). if (params.value != _slider->value()) { bool blocked = _slider->blockSignals(true); _slider->setValue(params.value); _slider->blockSignals(blocked); } } /** * @brief Zeichnet eine passiven Slider, um den möglichen Wertebereich des übergebenen BCValue anzuzeigen. */ void BCValueEditor::paintSliderIndicator(QPainter* painter, const QRect& rect, double ratio ) { // Kleinen Slider-Indikator zeichnen painter->save(); painter->setRenderHint(QPainter::Antialiasing); int adjX = rect.width() - cTextBlockOffset; // Mini Progress Bar: der Gesamtbereich QRect barRect = rect.adjusted( adjX, 12, -10-24, -12 ); painter->setPen(Qt::NoPen); painter->setBrush(QColor(0xE0E0E0)); painter->drawRoundedRect(barRect, 2, 2); // Mini Progress Bar: der Wertebereich barRect.setWidth( ratio * barRect.width() ); painter->setBrush(QColor(0x0078D4)); painter->drawRoundedRect(barRect, 2, 2); painter->restore(); } QRect BCValueEditor::updateEditorRect( const QRect& rect) { return rect.adjusted( rect.width() - cTextBlockOffset, // Von rechts: cTextBlockOffset (==130) px (Breite der Progress Bar) 0, // Oben: kein Offset -cPaddingRight, // Rechts: 8px Padding 0 // Unten: kein Offset ); }