How do I customize a QSlider that would work with timestamps?

370 views Asked by At

I am new working with QT. I am familiar with the QSlider class of Qt. But I am not sure whether it works with Timestamps. I have a QSlider object that can return an integer based on the position of its tick. However I want to customize it so that it can return timestamps (Ex. 10:50:20) instead. Could you tell me whether its possible ? or how can I implement it?

My goal is to create a slider that has values between 0:00:00 to 23:59:59. And based on the position of the tick it can return a value between 0:00:00 and 23:59:59

1

There are 1 answers

0
Sabbir Talukdar On BEST ANSWER

okay! so it was really easy!

#include <QApplication>

#include <QSlider>
#include <QLabel>
#include <QTime>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;
    w.resize(500, 200);
    w.show();

    auto vLayout = new QVBoxLayout(&w);
    auto slider = new QSlider(&w);
    slider->setOrientation(Qt::Horizontal);
    slider->setMinimum(0);
    slider->setMaximum(10000);

    auto timeLabel = new QLabel(&w);
    timeLabel->setText("00:00:00");
    vLayout->addWidget(slider,1);
    vLayout->addWidget(timeLabel,1);

    auto mapToRange = [](int minOutRange, int maxOutRange, int minInRange, int maxInRange, int value) ->double {
        return (value-minInRange)/static_cast<double>(maxInRange-minInRange)*(maxOutRange-minOutRange)+minOutRange;
    };

    QObject::connect(slider, &QSlider::valueChanged, timeLabel, [timeLabel, slider, mapToRange](int value) ->void {
        const QTime t = QTime::fromMSecsSinceStartOfDay(mapToRange(0,86399999, slider->minimum(), slider->maximum(), value));
        timeLabel->setText(t.toString("hh:mm:ss"));
    });

    return a.exec();
}