forked from Michal-Kawski/pod
/
multislidingvaluedialog.cpp
68 lines (61 loc) · 1.74 KB
/
multislidingvaluedialog.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
#include "multislidingvaluedialog.h"
#include <QVBoxLayout>
#include <QFormLayout>
#include <QDialogButtonBox>
#include <QSlider>
#include <QLabel>
MultiSlidingValueDialog::MultiSlidingValueDialog(QString text, int defValue,
int min, int max, int count,
QWidget *parent) :
QDialog(parent),
mText(text)
{
QVBoxLayout *vbl = new QVBoxLayout(this);
QWidget *widget = new QWidget(this);
vbl->addWidget(widget);
QFormLayout *fl = new QFormLayout(widget);
for (int i = 0; i < count; i++) {
QLabel *label = new QLabel(text, this);
QSlider *slider = new QSlider(Qt::Horizontal, this);
mLabels << label;
mSliders << slider;
slider->setObjectName(QString::number(i));
slider->setMinimum(min);
slider->setMaximum(max);
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(updateText(int)));
slider->setValue(defValue);
updateText(slider->value());
fl->addRow(label, slider);
}
QDialogButtonBox *dbb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
connect(dbb, SIGNAL(accepted()), this, SLOT(accept()));
connect(dbb, SIGNAL(rejected()), this, SLOT(reject()));
vbl->addWidget(dbb);
}
void MultiSlidingValueDialog::updateText(int value)
{
int i;
QObject *slider;
if (sender() != NULL) {
for (i = 0; i < mSliders.count(); i++) {
if (mSliders.at(i) == sender()) {
break;
}
}
slider = sender();
} else {
i = mSliders.count() - 1;
slider = mSliders.at(i);
}
QString name = slider->objectName();
QString textVal = QString::number(value);
mLabels[i]->setText(mText.arg(name, textVal));
}
QVector<int> MultiSlidingValueDialog::values() const
{
QVector<int> results;
foreach (QSlider *slider, mSliders) {
results << slider->value();
}
return results;
}