[gelöst] Qwt - wie kann man Ticks einzeln labeln

Alles rund um die Programmierung mit Qt
Antworten
mabralume
Beiträge: 39
Registriert: 26. April 2007 11:54
Wohnort: Siegen
Kontaktdaten:

[gelöst] Qwt - wie kann man Ticks einzeln labeln

Beitrag 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
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.
Uwe
Beiträge: 176
Registriert: 9. Oktober 2005 13:37
Wohnort: München

Beitrag 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
mabralume
Beiträge: 39
Registriert: 26. April 2007 11:54
Wohnort: Siegen
Kontaktdaten:

Beitrag 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 :oops: , 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
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
mabralume
Beiträge: 39
Registriert: 26. April 2007 11:54
Wohnort: Siegen
Kontaktdaten:

Beitrag 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
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
Antworten