From 929fa790b1d37e2757408deffd9c5131538a796a Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Mon, 19 Dec 2022 17:07:00 +0800 Subject: [PATCH] [UI][ADD] Model attribute slider - Combined label, slider and value label - Provide redesigned signals --- FinalProject/modelattrslide.cpp | 79 +++++++++++++++++++++++++++++++++ FinalProject/modelattrslide.h | 42 ++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 FinalProject/modelattrslide.cpp create mode 100644 FinalProject/modelattrslide.h diff --git a/FinalProject/modelattrslide.cpp b/FinalProject/modelattrslide.cpp new file mode 100644 index 0000000..2d839e9 --- /dev/null +++ b/FinalProject/modelattrslide.cpp @@ -0,0 +1,79 @@ +#include "modelattrslide.h" + +ModelAttributeSlide::ModelAttributeSlide(const QString& label, float min, float max, int step, QWidget* parent) : + QWidget(parent) +{ + // Create main stretch layout + _stretchLayout = new QHBoxLayout(this); + _stretchLayout->setContentsMargins(0, 0, 0, 0); + _stretchLayout->setSpacing(0); + setLayout(_stretchLayout); + + // Create Slider + _slider = new Slider(min, max, step, this); + _stretchLayout->addWidget(_slider); + _slider->show(); + + // Create Label + _label = new QLabel(label, this); + _label->setMinimumWidth(56); + _label->setFont(QFont("Corbel", 11)); + _label->show(); + _slider->mainLayout()->insertWidget(0, _label); + _slider->mainLayout()->insertSpacing(1, 8); + + // Create Value label + _val = new QLabel(this); + _val->setMinimumWidth(32); + _val->setFont(QFont("Corbel", 11)); + _val->setText(QString::number(_slider->val(), 'f', 1)); + _val->show(); + _slider->mainLayout()->addSpacing(8); + _slider->mainLayout()->addWidget(_val); + + // Connect + connect(_slider, &Slider::onChanged, this, &ModelAttributeSlide::onChanged); + connect(_slider, &Slider::onSetValue, this, [=]() { + _val->setText(QString::number(_slider->val(), 'f', 1)); + }); + connect(_slider, &Slider::onDragStart, this, &ModelAttributeSlide::onChangeStart); + connect(_slider, &Slider::onDragEnd, this, &ModelAttributeSlide::onChangeEnd); +} + +ModelAttributeSlide::~ModelAttributeSlide() +{} + +void ModelAttributeSlide::setLabel(const QString& label) +{ + _label->setText(label); +} + +void ModelAttributeSlide::setMin(float min) +{ + _slider->setMin(min); +} + +void ModelAttributeSlide::setMax(float max) +{ + _slider->setMax(max); +} + +void ModelAttributeSlide::setStep(float step) +{ + _slider->setStep(step); +} + +void ModelAttributeSlide::setValue(float val) +{ + _slider->setValue(val); +} + +void ModelAttributeSlide::setTransformation(std::function transform, std::function inverse) +{ + _slider->setTransformation(transform, inverse); +} + +void ModelAttributeSlide::setEnabled(bool enable) +{ + _slider->setEnabled(enable); +} diff --git a/FinalProject/modelattrslide.h b/FinalProject/modelattrslide.h new file mode 100644 index 0000000..a7bda63 --- /dev/null +++ b/FinalProject/modelattrslide.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include + +#include "slider.h" + +class ModelAttributeSlide : public QWidget +{ + Q_OBJECT + +public: + ModelAttributeSlide(const QString& label, float min, float max, int step, QWidget* parent = 0); + ~ModelAttributeSlide(); + +private: + QHBoxLayout* _stretchLayout; + QLabel* _label; + QLabel* _val; + Slider* _slider; + +public: + // Getter APIs + float val() const { return _slider->val(); } + float lev() const { return _slider->lev(); } + + // Setter APIs + void setLabel(const QString& label); + void setMin(float min); + void setMax(float max); + void setStep(float max); + void setValue(float val); // Set the actual value + void setTransformation(std::function transform, std::function inverse); + + void setEnabled(bool enable = true); + +signals: + void onChanged(float val); + void onChangeStart(); + void onChangeEnd(); +}; \ No newline at end of file