[gelöst] QImage und QCanvasText in eine Pixmap?

Alles rund um die Programmierung mit Qt
Antworten
MOAS
Beiträge: 8
Registriert: 3. Februar 2006 14:52

[gelöst] QImage und QCanvasText in eine Pixmap?

Beitrag von MOAS »

hallo leute,
erstmal ein hallo an alle :-)

ich versuche gerade die ganze zeit auf einem QCanvas eine art icon zuerstellen, welches aus einem bild (QImage) und einem darunter stehenden text (QCanvasText) besteht. etwa so wie im windows-explorer die symbole in der symbolansicht.
mein problem ist jetzt, das ich keinen ansatz habe, wie man diese beiden objekte zusammenführt, so dass sie hinterher als ein item auf dem canvas behandelt werden können. beides in ein QPixmap? aber wie?

vielleicht sollte ich noch dazu sagen, dass ich mit python arbeite, was an der grundlegenden realisierung ja aber nichts ändert. auch c++ code verstehe ich. bin für jede hilfe dankbar. falls quellcode erwünscht ist, poste ich den gerne noch.

danke
mfg

moas
Zuletzt geändert von MOAS am 6. Februar 2006 17:25, insgesamt 1-mal geändert.
stippy
Beiträge: 80
Registriert: 29. Juli 2005 09:38
Wohnort: Mönchengladbach

Beitrag von stippy »

Hi moas,

ich denke das wird Dir weiter helfen:

http://www.digitalfanatics.org/projects ... ter12.html

Gruss, Dirk
MOAS
Beiträge: 8
Registriert: 3. Februar 2006 14:52

Beitrag von MOAS »

danke dirk,

ich werd's mir gleich anschauen. ich geb dann nochmal bescheid, wenn's funktioniert.

mfg Heiko
MOAS
Beiträge: 8
Registriert: 3. Februar 2006 14:52

Beitrag von MOAS »

Also der Text ist nun schon erstmal Teil des Items.
Das Problem ist nun jedoch, zu wissen, wie groß (Höhe, Breite) der Text ist, um dementsprechend die Zeichenfläche richtig zu erstellen. Wie bekomme ich das hin?


Momentan habe ich einfach die Zeichenfläche mit setSize() um 20 Pixel höher gemacht, als das Icon. Das funktioniert auch ganz gut. Die Länge ist jedoch variabel und außerdem will ich den Text später unterhalb des Icons zentrieren.
Ich könnte natürlich für jedes Zeichen die Zeichenfläche um einen festen Wert erweitern. Die Zeichen auf der Zeichenfläche sind ja aber unterschiedlich breit...

Mein Quellcode sieht zur Zeit folgendermaßen aus:

Code: Alles auswählen

class IconItem(QCanvasRectangle):
    def __init__(self,ico, ico_text, canvas):
        QCanvasRectangle.__init__(self,canvas)

        self.imageRTTI=984376
        self.image = ico

        self.iconItem_text = ico_text
        
        self.setSize(self.image.width(), self.image.height()+20)
        self.pixmap=QPixmap()
        self.pixmap.convertFromImage(self.image, Qt.OrderedAlphaDither);

    def rtti(self):
        return self.imageRTTI

    def hit(self,p):
        ix = p.x()-self.x()
        iy = p.y()-self.y()
        if not self.image.valid( ix , iy ):
            return False
        self.pixel = self.image.pixel( ix, iy )
        return  (qAlpha( self.pixel ) != 0)

    def drawShape(self,p):
        p.drawPixmap( self.x(), self.y(), self.pixmap )
        p.drawText(self.x(), self.y()+self.image.height()+20, self.iconItem_text)
MOAS
Beiträge: 8
Registriert: 3. Februar 2006 14:52

Beitrag von MOAS »

Hab die Lösung:

Code: Alles auswählen

class IconItem(QCanvasRectangle):
    def __init__(self,ico, ico_text, canvas):
        QCanvasRectangle.__init__(self,canvas)

        self.imageRTTI=984376
        self.image = ico

        self.ico_txt_w = QCanvasText(ico_text, canvas).boundingRect().width()
        self.ico_txt_h = QCanvasText(ico_text, canvas).boundingRect().height()
        self.ico_txt = ico_text
        
        self.setSize(self.image.width(), self.image.height()+20)
        if self.ico_txt_w > self.image.width():
            self.setSize(self.ico_txt_w, self.image.height()+20)
        self.pixmap=QPixmap()
        self.pixmap.convertFromImage(self.image, Qt.OrderedAlphaDither);
        self.ico_txt = str(self.ico_txt_w)

    def rtti(self):
        return self.imageRTTI

    def hit(self,p):
        ix = p.x()-self.x()
        iy = p.y()-self.y()
        if not self.image.valid( ix , iy ):
            return False
        self.pixel = self.image.pixel( ix, iy )
        return  (qAlpha( self.pixel ) != 0)

    def drawShape(self,p):
        p.drawPixmap( self.x(), self.y(), self.pixmap )
        p.drawText(self.x(), self.y()+self.image.height()+20, self.ico_txt)
Danke schön für die schnelle Hilfe! :-) Problem gelöst!

MfG Heiko
Antworten