//#include #include //#include #include #include #include #include BCValueEditor::BCValueEditor(const BCValue& bcValue, QWidget *parent ) : QWidget(parent), _bcValue{bcValue} { setAutoFillBackground(true); _slider = new QSlider(Qt::Horizontal, this); _slider->setRange(0, 100); _slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); _slider->setSingleStep(1); _slider->setPageStep(10); _slider->setStyle(new BCSliderStyle()); _commitButton = new QPushButton(this); _commitButton->setIcon(style()->standardIcon(QStyle::SP_DialogResetButton)); _commitButton->setFixedSize(32, 32); auto *layout = new QHBoxLayout(this); // Deine gewünschten Margins für 36px Zeilenhöhe layout->setContentsMargins(2, 2, 2, 2); layout->setSpacing(4); layout->addWidget(_slider); layout->addWidget(_commitButton); setLayout(layout); // 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](){ _slider->setValue(0); }); } int BCValueEditor::getValue() const { return _slider->value(); } void BCValueEditor::setValue(int val) { // WICHTIG: Block Signals verhindern Endlosschleifen, falls das Model // das Widget während des Updates neu setzt (passiert manchmal bei Live-Updates). if (val != _slider->value()) { bool blocked = _slider->blockSignals(true); _slider->setValue(val); _slider->blockSignals(blocked); } }