Я хочу подключить QDoubleSpinBox
с QSlider
как это:
QObject::connect(ui->myDoubleSpinBox, SIGNAL(valueChanged(double)),
ui->mySlider, SLOT(setValue(double)));
QObject::connect(ui->mySlider, SIGNAL(valueChanged(double)),
ui->myDoubleSpinBox, SLOT(setValue(double)));
Это не будет работать, поскольку QSlider обрабатывает только значения int. Поэтому я думаю, что мне нужно добавить пользовательский слот в QSlider.
Я думал о создании нового класса, производного от QSlider, а затем о реализации слота, например:
QDoubleSlider.hpp
#ifndef QDOUBLESLIDER_H
#define QDOUBLESLIDER_H
#include <QSlider>
class QDoubleSlider : public QSlider
{
Q_OBJECT
public:
explicit QDoubleSlider(QObject *parent = 0);
signals:
public slots:
void setValue(double givenValue);
};
#endif // QDOUBLESLIDER_H
QDoubleSlider.cpp
#include "qdoubleslider.h"
QDoubleSlider::QDoubleSlider(QObject *parent) :
QSlider(parent)
{
}
void QDoubleSlider::setValue(double givenValue)
{
// code
}
Теперь у меня две проблемы:
QObject*
в QWidget*
в конструкторе.Есть идеи?
parent
должен быть QWidget*
как говорится в ошибкеdouble
в качестве члена и установите соответствующий ползунок в соответствующий целочисленный эквивалент. Не забудьте только отправить valueChanged
сигналы, если значение действительно изменяется.Кроме того, вы, вероятно, должны наследовать от QWidget
вместо этого и есть QSlider
будучи ребенком, вы не хотите, чтобы пользователи вашего класса изменяли диапазон целых чисел вашего внутреннего слайдера.
QSlider ( QWidget * parent = 0 )
void QDoubleSlider::setDoubleValue(double givenValue)
{
setValue(static_cast<int>(givenValue));
}