Qt: 实现浮点slider和浮点spinbox
生活随笔
收集整理的這篇文章主要介紹了
Qt: 实现浮点slider和浮点spinbox
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Qt默認(rèn)的QSlider和QSpinbox只能實(shí)現(xiàn)整數(shù)調(diào)整,不能實(shí)現(xiàn)浮點(diǎn)的變化,因此設(shè)計(jì)了如下可實(shí)現(xiàn)浮點(diǎn)變化的QFloatSlider和QFloatSpinner:
QFloatSlider.h
class QFloatSlider : public QSlider
{Q_OBJECTpublic:QFloatSlider(QWidget* pParent = NULL);void setRange(double Min, double Max);void setMinimum(double Min);double minimum() const;void setMaximum(double Max);double maximum() const;double value() const;public slots:void setValue(int value);void setValue(double Value, bool BlockSignals = false);private slots:signals:void valueChanged(double Value);void rangeChanged(double Min, double Max);private:double m_Multiplier;
};
QFloatSlider.cpp
QFloatSlider::QFloatSlider(QWidget* pParent /*= NULL*/) :QSlider(pParent),m_Multiplier(10000.0)
{connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));setSingleStep(1);setOrientation(Qt::Horizontal);setFocusPolicy(Qt::NoFocus);
}void QFloatSlider::setValue(int Value)
{emit valueChanged((double)Value / m_Multiplier);
}void QFloatSlider::setValue(double Value, bool BlockSignals)
{QSlider::blockSignals(BlockSignals);QSlider::setValue(Value * m_Multiplier);if (!BlockSignals)emit valueChanged(Value);QSlider::blockSignals(false);
}void QFloatSlider::setRange(double Min, double Max)
{QSlider::setRange(Min * m_Multiplier, Max * m_Multiplier);emit rangeChanged(Min, Max);
}void QFloatSlider::setMinimum(double Min)
{QSlider::setMinimum(Min * m_Multiplier);emit rangeChanged(minimum(), maximum());
}double QFloatSlider::minimum() const
{return QSlider::minimum() / m_Multiplier;
}void QFloatSlider::setMaximum(double Max)
{QSlider::setMaximum(Max * m_Multiplier);emit rangeChanged(minimum(), maximum());
}double QFloatSlider::maximum() const
{return QSlider::maximum() / m_Multiplier;
}double QFloatSlider::value() const
{int Value = QSlider::value();return (double)Value / m_Multiplier;
}
QFloatSpinner.h
class QFloatSpinner : public QDoubleSpinBox
{Q_OBJECTpublic:QFloatSpinner(QWidget* pParent = NULL);;virtual QSize sizeHint() const;void setValue(double Value, bool BlockSignals = false);
};
QSize QFloatSpinner::sizeHint() const
{return QSize(90, 20);
}QFloatSpinner::QFloatSpinner(QWidget* pParent /*= NULL*/) :QDoubleSpinBox(pParent)
{
}void QFloatSpinner::setValue(double Value, bool BlockSignals)
{blockSignals(BlockSignals);QDoubleSpinBox::setValue(Value);blockSignals(false);
}
總結(jié)
以上是生活随笔為你收集整理的Qt: 实现浮点slider和浮点spinbox的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qdockwidget设置隐藏标题栏,重
- 下一篇: 基于C++实现线程池加速