-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathnamedslider.cpp
79 lines (61 loc) · 1.77 KB
/
namedslider.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
Named slider
Niels A. Moseley 2016
License: GPLv2
*/
#include <QDebug>
#include "namedslider.h"
NamedSlider::NamedSlider(QString name, QWidget *parent)
: QWidget(parent)
{
m_layout = new QHBoxLayout(this);
m_label = new QLabel(name, this);
m_layout->addWidget(m_label);
m_slider = new QSlider(Qt::Horizontal, this);
m_slider->setRange(0, 1000);
m_layout->addWidget(m_slider);
m_edit = new QLineEdit(this);
m_edit->setText("0.000");
m_edit->setMaxLength(5);
// fix the size of the line edit box
QString text = m_edit->text();
QFontMetrics fm = m_edit->fontMetrics();
int w = fm.boundingRect(text).width()*1.5;
m_edit->setFixedSize(w, m_edit->height());
m_layout->addWidget(m_edit);
// remove margins to get a tigher layout!
m_layout->setMargin(0);
//BUG: double validator doesn't seem to work properly..
//m_validator.setRange(0.0, 10.0, 5);
//m_edit->setValidator(&m_validator);
v = 0;
connect(m_edit, SIGNAL(editingFinished()), this, SLOT(editingFinished()));
connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(sliderChanged(int)));
}
void NamedSlider::editingFinished()
{
// get number from line edit
bool ok;
v = m_edit->text().toFloat(&ok);
v = v > 1.0f ? 1.0f : v;
v = v < 0.0f ? 0.0f : v;
if (ok)
{
// update slider
m_slider->setValue(static_cast<int>(v*1000.0));
emit valueChanged(v);
}
}
void NamedSlider::sliderChanged(int sliderValue)
{
v = static_cast<float>(sliderValue) / 1000.0f;
v = v > 1.0f ? 1.0f : v;
v = v < 0.0f ? 0.0f : v;
QString txt = QString("%1").arg(v, 3,'f',3);
m_edit->setText(txt);
emit valueChanged(v);
}
QSize NamedSlider::sizeHint() const
{
return m_layout->sizeHint();
}