9

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

4

2 回答 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"
于 2013-09-25T14:39:30.100 回答
6

您可以简单地将滑块值除以某个常数。例如:

const int dpi = 10; // Any constant 10^n
int slideVal = 57;  // Integer value from slider
double realVal = double( slideVal / dpi ); // float value
于 2013-09-25T11:36:21.767 回答