如何自定义可以使用时间戳的 QSlider?
How do I customize a QSlider that would work with timestamps?
我刚开始使用 QT。 Qt的QSliderclass我比较熟悉。但我不确定它是否适用于时间戳。我有一个 QSlider 对象,它可以 return 一个基于其刻度位置的整数。但是我想自定义它,以便它可以 return 时间戳(例如 10:50:20
)。
你能告诉我它是否可能吗?或者我该如何实施?
我的目标是创建一个值介于 0:00:00 到 23:59:59 之间的滑块。根据刻度的位置,它可以 return 0:00:00 和 23:59:59
之间的值
好的!所以真的很简单!
#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();
}
我刚开始使用 QT。 Qt的QSliderclass我比较熟悉。但我不确定它是否适用于时间戳。我有一个 QSlider 对象,它可以 return 一个基于其刻度位置的整数。但是我想自定义它,以便它可以 return 时间戳(例如 10:50:20
)。
你能告诉我它是否可能吗?或者我该如何实施?
我的目标是创建一个值介于 0:00:00 到 23:59:59 之间的滑块。根据刻度的位置,它可以 return 0:00:00 和 23:59:59
之间的值好的!所以真的很简单!
#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();
}