【问题标题】:How to make a QSlider change with double values如何使用双值进行 QSlider 更改
【发布时间】:2013-09-30 22:53:10
【问题描述】:

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

【问题讨论】:

    标签: qt qslider


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,我以前见过这个解决方案,我发现它是最简单的,但是我的老师要我练习信号和槽,所以我更喜欢添加自定义信号和槽。不过还是谢谢你!
    • @user2814864 你老师的想法也不错。您可以创建自己的 QObject 类来重新翻译 QSlider 的信号,但使用 double 参数。
    • @vahancho 确实如此,但问题是,我仍然是编程和 Qt 的初学者,我对如何做到这一点没有真正的想法。
    • @vahancho 好的!我会给它一些镜头,但你知道文档是否可以帮助我吗?
    • 从官方文档开始。你读过吗? - qt-project.org/doc/qt-5.0/qtcore/signalsandslots.html
    【解决方案2】:

    当我还是 Qt 初学者时,我从 this tutorial 开始。它有点旧(它指的是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"
    

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2023-04-09
      相关资源
      最近更新 更多