Seite 1 von 1

Kleinere QPixmap in größerer QPixmap zentrieren

Verfasst: 20. Oktober 2009 15:16
von kert
Hallo,

ich erzeuge mir über die Funktion QBitmap::fromData eine Bitmap mit angegebener Größe des Rasters und den bits.

int width = MySymbols[0].Width;
int height = MySymbols[0].Height;
QBitmap cb = QBitmap::fromData(QSize(width, height), MySymbols[0].Rasters);
QIcon symbolIcon;
symbolIcon.addPixmap(cb);

In meinem Array MySymbols sind verschiedene Symbole unterschiedlicher Größe, angefangen bei 3x3Pixel, gespeichert. Nun möchte ich das erste Symbol des Feldes aber in ein QIcon der Größe 20x20 einfügen. Dabei würde ich das Ganze gerne so machen, dass das gerasterte Symbol in dem neuen QIcon zentriert/mittig erscheint.

Wenn ich schreibe: QBitmap cb = QBitmap::fromData(QSize(20, 20), MySymbols[0].Rasters); kommt nichts gescheites bei raus.
Hat jemand von euch vielleicht irgendwelche brauchbaren Tipps für mich?
Schonmal viele Dank. Kerstin.

Verfasst: 20. Oktober 2009 16:24
von Christian81
QPainter ist dein Freund.

Verfasst: 21. Oktober 2009 08:23
von kert
Das habe ich versucht:

QPainter painter;
painter.drawPixmap(0, 0, width, height, cb);
//symbolIcon.addPixmap(cb);
symbolIcon.paint(&painter, 0, 0, size.width(), size.height());

Aber mein symbolIcon ist ein NULL-Icon (isNull() == true) und ich sehe überhaupt kein Icon mehr... Verwende ich das falsch?

Verfasst: 21. Oktober 2009 08:56
von Christian81
Auch nur ansatzweise die Doku zu QPainter gelesen?

Verfasst: 21. Oktober 2009 09:33
von kert
ich sollte dem konstruktor von QPainter vielleicht zunächst einen PaintDevice übergeben:

QBitmap cb;
QPainter painter(&cb);
cb = QBitmap::fromData(QSize(width, height), MySymbols[s].Rasters);

painter.drawPixmap(startX, startY, width, height, cb);

Aber ich verstehe noch nicht, wie ich dann das ganze wieder auf den qicon bekomme...

mit folgender zeile gehts auf jeden fall nicht:
symbolIcon.paint(&painter, 0, 0, size.width(), size.height());

cb ist das, was ich habe und darstellen möchte. nur kann es verschiedene größen haben, so dass ich es dann nochmal zentriert in dem qicon darstellen will? irgendwie kriege ich das nicht hin. hat vielleicht noch jemand einen tipp für mich?

Verfasst: 25. Oktober 2009 17:41
von Troll.Soft
kert hat geschrieben: QBitmap cb;
QPainter painter(&cb);
cb = QBitmap::fromData(QSize(width, height), MySymbols[s].Rasters);
painter.drawPixmap(startX, startY, width, height, cb);
cb ist das, was ich habe und darstellen möchte.
Du zeichnest anscheinend aus cb in cb. Das geht wohl schief. Nimm ein anderes Paintdevice.
tschüß
TrollSoft