如何让QSlider使用双精度值进行更改

9

我的问题是,我似乎无法使我的QSlider使用双精度值而不是整数。因为我需要让它返回双精度值到QLineEdit,并在我输入一些值时设置它自己的值。

2个回答

10

当我还是Qt的初学者时,我从这个教程开始。虽然这个教程有点老(它是关于Qt4.1的),但已经足够好让我入门!

我编写了一个简单的示例应用程序,可以帮助您入门...也许您会发现它很有用!

#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"

7

您可以将滑块的值除以某个常量。例如:

const int dpi = 10; // Any constant 10^n
int slideVal = 57;  // Integer value from slider
double realVal = double( slideVal / dpi ); // float value

嗯,我之前见过这个解决方案,我发现它是最简单的,但我的老师想让我练习信号和槽,所以我更喜欢添加自定义信号和槽。不管怎样,还是谢谢你! - Isaac Kennedy
@user2814864,你老师的想法也很好。你可以创建自己的QObject类,重新翻译QSlider的信号,但使用double参数。 - vahancho
@vahancho 没错,但问题是,我在编程和Qt方面仍然是个初学者,对如何实现这一点没有真正的想法。 - Isaac Kennedy
@vahancho 好的!我会尝试一下,但是你知道文档能帮助我吗? - Isaac Kennedy
从官方文档开始。你有阅读过吗?- http://qt-project.org/doc/qt-5.0/qtcore/signalsandslots.html - Dmitry Sazonov
@DmitrySazonov 不,我没有。谢谢你!我认为这份文档会非常有用。 - Isaac Kennedy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接