Search code examples
qtqslider

How to make a QSlider change with double values


My problem is that I just can't seem to make my QSlider work with double values instead of integer, because I need to make it return double values to a QLineEdit and also set it's own value when I put some value in the edit.


Solution

  • When I was a Qt beginner I started with this tutorial. It is a little bit old (it refers to Qt4.1), but it was good enough to get me started!

    I have put together a simple example application that can show you where to start... Maybe you can find it helpful!

    #include <QApplication>
    #include <QtGui>
    #include <QVBoxLayout>
    #include <QSlider>
    #include <QLabel>
    
    class DoubleSlider : public QSlider {
        Q_OBJECT
    
    public:
        DoubleSlider(QWidget *parent = 0) : QSlider(parent) {
            connect(this, SIGNAL(valueChanged(int)),
                this, SLOT(notifyValueChanged(int)));
        }
    
    signals:
        void doubleValueChanged(double value);
    
    public slots:
        void notifyValueChanged(int value) {
            double doubleValue = value / 10.0;
            emit doubleValueChanged(doubleValue);
        }
    };
    
    class Test : public QWidget {
        Q_OBJECT
    public:
        Test(QWidget *parent = 0) : QWidget(parent),
            m_slider(new DoubleSlider()),
            m_label(new QLabel())
        {
            m_slider->setOrientation(Qt::Horizontal);
            m_slider->setRange(0, 100);
            QVBoxLayout *layout = new QVBoxLayout(this);
            layout->addWidget(m_slider);
            layout->addWidget(m_label);
            connect(m_slider, SIGNAL(doubleValueChanged(double)),
                this, SLOT(updateLabelValue(double)));
            updateLabelValue(m_slider->value());
        }
    
    public slots:
        void updateLabelValue(double value) {
            m_label->setText(QString::number(value, 'f', 2));
        }
    
    private:
        QSlider *m_slider;
        QLabel *m_label;
    };
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        Test *wid = new Test();
        wid->show();
    
        return a.exec();
    }
    
    #include "main.moc"