26  QHBoxLayout *layout = 
new QHBoxLayout();
 
   27  layout->setContentsMargins( 0, 0, 0, 0 );
 
   28  layout->setSpacing( 3 );
 
   31  mSlider = 
new QSlider();
 
   32  mSlider->setMinimum( 0 );
 
   33  mSlider->setMaximum( 1000 );
 
   34  mSlider->setSingleStep( 10 );
 
   35  mSlider->setPageStep( 100 );
 
   36  mSlider->setValue( 1000 );
 
   37  mSlider->setOrientation( Qt::Horizontal );
 
   38  layout->addWidget( mSlider, 1 );
 
   41  mSpinBox->setMinimum( 0.0 );
 
   42  mSpinBox->setMaximum( 100.0 );
 
   43  mSpinBox->setValue( 100.0 );
 
   45  mSpinBox->setMinimumSize( QSize( 100, 0 ) );
 
   46  mSpinBox->setDecimals( 1 );
 
   47  mSpinBox->setSuffix( tr( 
" %" ) );
 
   48  layout->addWidget( mSpinBox, 0 );
 
   50  setFocusProxy( mSpinBox );
 
   52  connect( mSlider, &QSlider::valueChanged, 
this, [
this]( 
int value ) { mSpinBox->setValue( 
value / 10.0 ); } );
 
   53  connect( mSpinBox, 
static_cast<void ( 
QgsDoubleSpinBox::* )( 
double )
>( &QgsDoubleSpinBox::valueChanged ), 
this, [
this]( 
double value ) { 
whileBlocking( mSlider )->setValue( 
static_cast<int>( std::lround( 
value * 10 ) ) ); } );
 
   54  connect( mSpinBox, 
static_cast<void ( 
QgsDoubleSpinBox::* )( 
double )
>( &QgsDoubleSpinBox::valueChanged ), 
this, &QgsPercentageWidget::spinChanged );