slider.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. Copyright (c) 2022 George Bartolomey
  3. Этот файл — часть w2midi_qt.
  4. w2midi_qt — свободная программа: вы можете перераспространять ее и/или изменять ее на условиях Стандартной общественной лицензии GNU в том виде, в каком она была опубликована Фондом свободного программного обеспечения; версии 3.
  5. w2midi_qt распространяется в надежде, что она будет полезной, но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Стандартной общественной лицензии GNU.
  6. Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если это не так, см. <https://www.gnu.org/licenses/>.
  7. */
  8. #include "slider.h"
  9. #include "clickablelabel.h"
  10. #include <QtWidgets>
  11. Slider::Slider(int min, int max, int def, int ticks, QString name, std::function<QString(int)> measure)
  12. {
  13. QGridLayout *grid = new QGridLayout();
  14. setLayout(grid);
  15. grid->setRowStretch(1, 1);
  16. QLabel *minLabel = new QLabel(QString::number(min));
  17. QLabel *maxLabel = new QLabel(QString::number(max));
  18. nameLabel = new QLabel(name);
  19. measureLabel = new ClickableLabel(measure(def));
  20. nameLabel->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum));
  21. nameLabel->setWordWrap(true);
  22. minLabel->setAlignment(Qt::AlignmentFlag::AlignLeft | Qt::AlignmentFlag::AlignBottom);
  23. maxLabel->setAlignment(Qt::AlignmentFlag::AlignLeft | Qt::AlignmentFlag::AlignTop);
  24. nameLabel->setAlignment(Qt::AlignmentFlag::AlignLeft | Qt::AlignmentFlag::AlignTop);
  25. measureLabel->setAlignment(Qt::AlignmentFlag::AlignLeft | Qt::AlignmentFlag::AlignBottom);
  26. slider = new QSlider();
  27. slider->setOrientation(Qt::Orientation::Vertical);
  28. slider->setRange(min, max);
  29. slider->setTickInterval((max - min) / ticks);
  30. slider->setTickPosition(QSlider::TicksBelow);
  31. slider->setValue(def);
  32. grid->addWidget(measureLabel, 0, 0, 1, 2);
  33. grid->addWidget(slider, 1, 0, 2, 1);
  34. grid->addWidget(maxLabel, 1, 1);
  35. grid->addWidget(minLabel, 2, 1);
  36. grid->addWidget(nameLabel, 3, 0, 1, 2);
  37. connect(measureLabel, &ClickableLabel::doubleClicked, slider, [=]() {
  38. slider->setValue(def);
  39. });
  40. connect(slider, &QAbstractSlider::valueChanged, measureLabel, [=](int value) {
  41. measureLabel->setText(measure(value));
  42. emit valueChanged(value);
  43. });
  44. }