Forum: PC-Programmierung Qt drawPixmap


von Mike (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine Frage zur Funktion:
1
void QPainter::drawPixmap(int x, int y, const QPixmap & pixmap, int sx, int sy, int sw, int sh)

Die Beschreibung lautet:
1
 
2
This is an overloaded function.
3
4
Draws a pixmap at (x, y) by copying a part of the given pixmap into the paint device.
5
6
(x, y) specifies the top-left point in the paint device that is to be drawn onto. (sx, sy) specifies the top-left point in pixmap that is to be drawn. The default is (0, 0).
7
8
(sw, sh) specifies the size of the pixmap that is to be drawn. The default, (0, 0) (and negative) means all the way to the bottom-right of the pixmap.

Da heisst, die Funktion zeichnet das Pixmap von oben links beginnend bis 
unten rechts. Ich bräuchte nun eine Funktion, die von unten rechts 
beginnend bis oben links zeichnet. Weiss da einer etwas?
Natürlich könnte ich mir nun ein Bild in der Farbe des Hintergrunds 
erstellen und damit das eigentlich Bild überdecken aber das wäre zuerst 
einmal nur ein workaround für mich.

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Hallo Mike,

wenn ich das richtig verstehe, kannst Du mit der Funktion ein
Pixmap, bzw. auch einen Teil davon, auf ein PaintDevice zeichnen / 
kopieren. Dabei sollte es doch egal sein, ob das von links nach rechts 
oder umgekehrt gezeichnet wird. Oder verstehe ich etwas an Deiner Frage 
nicht?

Gruß

Olaf

von Mike (Gast)


Lesenswert?

Ich habe einfach einen vertiaklen Balken, der einen Füllstand 
wiedergibt. Jetzt möchte ich, dass der Balken von oben her niedirger 
wird und nicht von unten. Und mit dieser Funktion habe ich es bisher nur 
geschafft, den Balken von unten her kleiner zu machen.

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Ok. Welche Werte veränderst Du denn?
x, y, sx, sy, w oder h?

Wenn der Balken von oben her niedriger werden soll,
musst Du y (also die vertikale Position auf dem PaintDevice)
verändern. Damit der untere Rand des gezeichneten Pixmaps konstant 
bleibt,
musst Du natürlich h auch entsprechend verändern.

Normalerweise nimmt man für so etwas eine Fertige Füllstandsanzeige 
(QProgressBar).

Gruß

Olaf

von Mike (Gast)


Lesenswert?

Olaf D. schrieb:
> Wenn der Balken von oben her niedriger werden soll,
> musst Du y (also die vertikale Position auf dem PaintDevice)
> verändern.

y ist die Position, an die gezeichnet werden soll. Hat also nichts mit 
der "Normierung" des Pixmaps zu tun.
Ich habe nun mit sy etwas herumgespielt. So wie ich das sehe ist sy 
einfach ein Offset. Das Pixmap wird einfach um sy nach oben verschoben 
und oben herum abgeschnitten. Zusätzlich habe ich den gleiche Werte wie 
in sy zu y Position addiert und schon scheint es zu passen.


Olaf D. schrieb:
> Normalerweise nimmt man für so etwas eine Fertige Füllstandsanzeige
> (QProgressBar).
Ich verwedene gar keine Widgets von Qt, da ich fertige Grafiken habe.

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Lesenswert?

Ja, das ist ja schön und gut.
Ich nehme in so einem Fall das originale Widget und überschreibe in 
einer abgeleiteten Klasse die paint Methode.

Aber schön das es jetzt funktioniert.

Gruß

Olaf

von Mike (Gast)


Lesenswert?

Olaf D. schrieb:
> Ich nehme in so einem Fall das originale Widget und überschreibe in
> einer abgeleiteten Klasse die paint Methode.

Ok so tief bin ich in die ganze Thematik noch nicht eingestiegen.

von Rolf M. (rmagnus)


Lesenswert?

Mike schrieb:
> Olaf D. schrieb:
>> Wenn der Balken von oben her niedriger werden soll,
>> musst Du y (also die vertikale Position auf dem PaintDevice)
>> verändern.
>
> y ist die Position, an die gezeichnet werden soll. Hat also nichts mit
> der "Normierung" des Pixmaps zu tun.

y gibt die Oberkante an. Wenn die verschoben werden soll, musst du y 
ändern. Mir ist nicht ganz klar, was du mit "Normierung" meinst.

> Ich habe nun mit sy etwas herumgespielt. So wie ich das sehe ist sy
> einfach ein Offset.

sx, sy, sw und sh beschreiben, welchen Ausschnitt aus der Pixmap du 
zeichnen willst.

> Das Pixmap wird einfach um sy nach oben verschoben und oben herum
> abgeschnitten.

Ja, so kann man es auch formulieren.

von Sven B. (scummos)


Lesenswert?

Du musst halt rechnen. Wähle x und y so, dass bei dem sx und sy was du 
angibst die unten links da landet wo du sie haben willst, obwohl x und y 
die Ecke oben rechts angeben ... ist ja leicht machbar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.