QSlider mit Beschriftung?
-
Ich bin auf der Suche nach einem QSlider mit Beschriftung.
Ich möchte damit eine Tonspur navigieren. Gefunden habe ich QwtSlider die schon mal
eine Beschriftung mit Zahlen bereitstellen. Fast was ich brauche ... ich
könnte damit 0-100% Slider bauen.Bisher nehme ich normalen QSlider , setze minimum auf 0 und maximum auf Tonspurlänge[ms].
Gibt es ne Möglichkeit das Label immer zentriert unter dem Sliderknob zu haben
oder halt ticks zu beschriften?// labeledtimeslider.h #ifndef LABELEDTIMESLIDER_H #define LABELEDTIMESLIDER_H #include <QtCore/QTime> #include <QtGui/QHBoxLayout> #include <QtGui/QLabel> #include <QtGui/QSlider> #include <QtGui/QWidget> // helperclass for label class TimeLabel : public QLabel { Q_OBJECT public: TimeLabel(QWidget * parent = 0, Qt::WindowFlags f = 0) : QLabel (parent, f) { setText(0); } virtual ~TimeLabel() {} ; public slots: void setText(int ms); }; // widget for labeled slider class LabeledTimeSlider : public QWidget { Q_OBJECT public: LabeledTimeSlider(QTime length = QTime(23,59,59,999), QWidget * parent = 0); // not really needed, should be deleted by parenting-relationship virtual ~LabeledTimeSlider() { delete l; delete s; delete lay; } ; private: QHBoxLayout * lay; TimeLabel * l; QSlider * s; }; #endif // LABELEDTIMESLIDER_H
// labeledtimeslider.cpp #include <QtCore/QTime> #include "labeledtimeslider.h" void TimeLabel::setText(int ms) { int hh = ms / (60*60*1000); ms -= hh * (60*60*1000); int mm = ms / (60*1000); ms -= mm * (60*1000); int ss = ms / (1000); ms -= ss * 1000; int zz = ms; QTime tmp = QTime(hh,mm,ss,zz); if (tmp.isValid()) QLabel::setText(tmp.toString("hh:mm:ss (zzz)")); else QLabel::setText("--:--:-- (---)"); } LabeledTimeSlider::LabeledTimeSlider(QTime length, QWidget * parent) : QWidget(parent) { lay = new QHBoxLayout(this); s = new QSlider(Qt::Horizontal); int msec = length.hour()*60*60*1000 + length.minute()*60*1000 + length.second()*1000 + length.msec(); s->setRange(0,msec); lay->addWidget(s); l = new TimeLabel(); lay->addWidget(l); setLayout(lay); setMinimumSize(500,50); show(); connect(s,SIGNAL(sliderMoved(int)),l,SLOT(setText(int))); connect(s,SIGNAL(valueChanged(int)),l,SLOT(setText(int))); }
// main.cpp #include <QtGui/QApplication> #include <QtGui/QWidget> #include "labeledtimeslider.h" int main(int argv, char *args[]) { QApplication app(argv, args); QWidget *g = new LabeledTimeSlider(QTime(0,15,24,289)); g->show(); return app.exec(); }
-
passt doch bisher soweit. Ein
l->setAlignment(Qt::AlignCenter);
fehlt noch fürs zentrieren.
-
zwutz schrieb:
passt doch bisher soweit. Ein
l->setAlignment(Qt::AlignCenter);
fehlt noch fürs zentrieren.Hab ich probiert, warscheinlich habe ich mich undeutlich ausgedrückt ...
ich dachte daran das Label immer zentriert unter der derzeitigen Knopf-position des Sliders zu haben - ich vermute mal das klappt nur mit viel rumgepfusche im Inneren der Paint Methode eines abgeleiteten QSliders?