QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgspercentagewidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgspercentagewidget.h
3 -----------------
4 Date : January 2024
5 Copyright : (C) 2024 Nyall Dawson
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#include "qgspercentagewidget.h"
17#include "qgsdoublespinbox.h"
18#include "qgis.h"
19#include <QHBoxLayout>
20#include <QSlider>
21
23 : QWidget( parent )
24{
25 QHBoxLayout *layout = new QHBoxLayout();
26 layout->setContentsMargins( 0, 0, 0, 0 );
27 layout->setSpacing( 3 );
28 setLayout( layout );
29
30 mSlider = new QSlider();
31 mSlider->setMinimum( 0 );
32 mSlider->setMaximum( 1000 );
33 mSlider->setSingleStep( 10 );
34 mSlider->setPageStep( 100 );
35 mSlider->setValue( 1000 );
36 mSlider->setOrientation( Qt::Horizontal );
37 layout->addWidget( mSlider, 1 );
38
39 mSpinBox = new QgsDoubleSpinBox();
40 mSpinBox->setMinimum( 0.0 );
41 mSpinBox->setMaximum( 100.0 );
42 mSpinBox->setValue( 100.0 );
43 mSpinBox->setClearValue( 100.0 );
44 mSpinBox->setMinimumSize( QSize( 100, 0 ) );
45 mSpinBox->setDecimals( 1 );
46 mSpinBox->setSuffix( tr( " %" ) );
47 layout->addWidget( mSpinBox, 0 );
48
49 setFocusProxy( mSpinBox );
50
51 connect( mSlider, &QSlider::valueChanged, this, [ = ]( int value ) { mSpinBox->setValue( value / 10.0 ); } );
52 connect( mSpinBox, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, [ = ]( double value ) { whileBlocking( mSlider )->setValue( static_cast< int >( std::lround( value * 10 ) ) ); } );
53 connect( mSpinBox, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, &QgsPercentageWidget::spinChanged );
54}
55
57{
58 return mSpinBox->value() / 100.0;
59}
60
62{
63 mSpinBox->setValue( value * 100.0 );
64}
65
66void QgsPercentageWidget::spinChanged( double value )
67{
68 emit valueChanged( value / 100.0 );
69}
70
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value.
void setClearValue(double customValue, const QString &clearValueText=QString())
Defines the clear value as a custom value and will automatically set the clear value mode to CustomVa...
QgsPercentageWidget(QWidget *parent=nullptr)
Constructor for QgsPercentageWidget.
void valueChanged(double value)
Emitted when the value is changed in the widget, where value is a factor which ranges from 0....
void setValue(double value)
Sets the current value to show in the widget, where value is a factor which ranges from 0....
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
Definition: qgis.h:5111