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
[gelöst] Qwt - wie kann man Ticks einzeln labeln
[gelöst] Qwt - wie kann man Ticks einzeln labeln
Zuletzt geändert von mabralume am 16. März 2009 10:06, insgesamt 1-mal geändert.
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
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
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
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
![Smile :)](./images/smilies/icon_e_smile.gif)
... sag mal, steht das irgendwo?
mfg
MB
edit:
ähm ich mein nur, vlcht. bin ich ja nur zu dusselig die doku zu lesen
![Embarrassed :oops:](./images/smilies/icon_redface.gif)
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
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 :
mfg
MB
THX
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();
MB
THX
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.