4
#include <qwt_slider.h>
5
#include <qwt_thermo.h>
9
class TuningThermo: public QWidget
12
TuningThermo(QWidget *parent):
15
d_thermo = new QwtThermo(this);
16
d_thermo->setOrientation(Qt::Horizontal, QwtThermo::NoScale);
17
d_thermo->setRange(0.0, 1.0);
18
d_thermo->setFillColor(Qt::green);
20
QLabel *label = new QLabel("Tuning", this);
21
label->setAlignment(Qt::AlignCenter);
23
QVBoxLayout *layout = new QVBoxLayout(this);
25
layout->addWidget(d_thermo);
26
layout->addWidget(label);
28
setFixedWidth(3 * label->sizeHint().width());
31
void setValue(double value)
33
d_thermo->setValue(value);
40
TunerFrame::TunerFrame(QWidget *parent):
43
d_sldFreq = new QwtSlider(this, Qt::Horizontal, QwtSlider::TopScale);
44
d_sldFreq->setRange(87.5, 108, 0.01, 10);
45
d_sldFreq->setScaleMaxMinor(5);
46
d_sldFreq->setScaleMaxMajor(12);
47
d_sldFreq->setThumbLength(80);
48
d_sldFreq->setBorderWidth(1);
50
d_thmTune = new TuningThermo(this);
52
d_whlFreq = new QwtWheel(this);
53
d_whlFreq->setMass(0.5);
54
d_whlFreq->setRange(87.5, 108, 0.01);
55
d_whlFreq->setTotalAngle(3600.0);
56
d_whlFreq->setFixedHeight(30);
59
connect(d_whlFreq, SIGNAL(valueChanged(double)), SLOT(adjustFreq(double)));
60
connect(d_sldFreq, SIGNAL(valueChanged(double)), SLOT(adjustFreq(double)));
62
QVBoxLayout *mainLayout = new QVBoxLayout(this);
63
mainLayout->setMargin(10);
64
mainLayout->setSpacing(5);
65
mainLayout->addWidget(d_sldFreq);
67
QHBoxLayout *hLayout = new QHBoxLayout;
68
hLayout->setMargin(0);
69
hLayout->addWidget(d_thmTune, 0);
70
hLayout->addStretch(5);
71
hLayout->addWidget(d_whlFreq, 2);
73
mainLayout->addLayout(hLayout);
76
void TunerFrame::adjustFreq(double frq)
78
const double factor = 13.0 / (108 - 87.5);
80
const double x = (frq - 87.5) * factor;
81
const double field = qwtSqr(sin(x) * cos(4.0 * x));
83
d_thmTune->setValue(field);
85
if (d_sldFreq->value() != frq)
86
d_sldFreq->setValue(frq);
87
if (d_whlFreq->value() != frq)
88
d_whlFreq->setValue(frq);
90
emit fieldChanged(field);
93
void TunerFrame::setFreq(double frq)
95
d_whlFreq->setValue(frq);