Seite 1 von 1
[gelöst] Qwt - wie kann man Ticks einzeln labeln
Verfasst: 13. März 2009 08:18
von mabralume
Ja, also ich möchte gern die Ticks in der erzeugten Scala einzeln labeln. Ich habe eine Zeitscala welche im Abstand von 2 h Ticks hat und entsprechend gelabelt ist. Allerdings ist der Endwert auf einem ungeraden Wert zwischen dem Abstand von 2 Ticks und der wird nicht gelabelt. Wie kann ich da trotzdem ein Label anbringen ?
mfg
MB
Verfasst: 13. März 2009 09:11
von Uwe
Labels werden an Major Ticks angebracht. D.h. Du mußt dafür sorgen, daß an allen Positionen die Du beschriftet haben willst Major Ticks sind.
Die Verteilung der Ticks (QwtScaleDiv) wird normalerweise von der Scale Engine übernommen. Du kannst ihr Ergebnis aber auch nachträglich manipulieren ( überladen von QwtScaleEngine::divideScale ) oder gleich eine individuelle Verteilung der Ticks zuweisen ( QwtPlot::setAxisScaleDiv() ).
HTH,
Uwe
Verfasst: 13. März 2009 09:28
von mabralume
Hey, DANKE
... sag mal, steht das irgendwo?
mfg
MB
edit:
ähm ich mein nur, vlcht. bin ich ja nur zu dusselig die doku zu lesen

, aber ich würd meinen, die haben die Ticks nicht beschrieben. Is auch egal, wenns funzt wie ich mir das denke, poste ich den code
Verfasst: 16. März 2009 10:05
von mabralume
Wenn man weiß, das die Major's für die Beschriftung zuständig sind, dann ist die Lösung relativ simpel. Wie gesagt, es ging eigentlich nur darum, das der letze Wert nicht gelabelt wird, wenn der Wert nicht in die Skalierung passt. Wenn ich zum Beispiel eine X-Achse von 13 1/2 h habe und die Scala eine 2h Einteilung hat, dann wird der letzte Wert nicht mehr gelabelt , deshalb folgende Lösung :
Code: Alles auswählen
qwtPlot->replot();
//Nach dem replot hol ich mir die Scaleneinteilung
QwtScaleDiv* sdiv = qwtPlot->axisScaleDiv(QwtPlot::xBottom);
//und die MajorTicks, an denen die Labels stehen
const QwtValueList &majorTicks = sdiv->ticks(QwtScaleDiv::MajorTick);
//mache meine eigene Tickliste
QwtValueList newTickList;
bFound = false;
for (int i = 0; i < (int)majorTicks.count(); i++)
{
//kopiere die bisherigen Ticks um
newTickList.append(majorTicks[i]);
//schaue nach, ob der letzte Wert an der Scala gelabelt wurde
if(majorTicks[i]==MaxWert)
bFound = true;
}
//letzter Wert wurde nicht gelabelt
if(!bFound)
testList.append(MaxWert); //tickliste ergänzen
//und zurückschreiben
sdiv->setTicks(QwtScaleDiv::MajorTick,testList);
//scala aktualisieren
qwtPlot->replot();
mfg
MB
THX