Seite 1 von 1

Qt4: QPainter -> scale

Verfasst: 23. Mai 2007 16:01
von nando
Hi....

ich habe ein widget das etwas zeichnet..... (in paintEvent)...
dann skaliere ich den painter mit painter.scale(...)...


obwohl das widget skaliert wurde zeigt mir widget->width() bzw. widget->height() immer die gleichen werte an.. das is ja auch gut so..

aber wie bekomme ich den wert, den das skalierte widget wirklich braucht...?

ich hab naemlich eine art grid layout das lauter (skalierte) widget darstellen soll.... wenn ich die widgets kleiner skaliere werden sie auch kleiner, aber die abstaende zwischen den verkleinerten widgets im grid bleiben unverändert, weil ja width() und height() immer noch gleich ist.......

ich muss irgendwie an die werte kommen die das skalierte widget tatsaechlich benoetigt....



gruss,
nando

Verfasst: 23. Mai 2007 19:03
von upsala
Die Widgetgröße hat nichts mit dem Painter zu tun und ist somit unabhängig von einer event. Skalierung. Die benötigten Werte mußt du dir somit auch selbst berechnen, was aber nicht wirklich ein Problem darstellen dürfte...

Verfasst: 24. Mai 2007 11:19
von nando
ja okay, aber wie bekomme ich denn dann die pixel anzahl, die mein skalierter QPainter braucht.. ?????

ich habe es probiert auszurechnen.. aber das funzt irgendwie nicht...

etwas so....

Code: Alles auswählen


paintEvent()
{
...
    painter.scale(m_scale, m_scale);
}

.....

// SLOT
void
class::zoomIn()
{
   m_scale += 0.1;

   repaint();

   resize(width()   + width() * 0.1,
             height() + height() * 0.1);
}



Irgendwie stimmt die neue width nie mit der berechneten ganz ueberein.....

gibt es einene einfacheren weg an die width zu kommen, die mein skalierter painter belegt?

gruss,
nando

Verfasst: 24. Mai 2007 12:15
von upsala
Ich dachte ja eher an scale*width...

Verfasst: 24. Mai 2007 14:17
von nando
hab ich auch erst... aber die width() aendert sich ja mit jedem slot aufruf...

und wenn ich scale * width machen wuerde, wuerde ich den scale auf die neuen groessen und nicht auf die ausgangsgroesse anwenden....