Seite 1 von 1
[gelöst] QImage und QCanvasText in eine Pixmap?
Verfasst: 3. Februar 2006 15:07
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
Verfasst: 6. Februar 2006 08:48
von stippy
Hi moas,
ich denke das wird Dir weiter helfen:
http://www.digitalfanatics.org/projects ... ter12.html
Gruss, Dirk
Verfasst: 6. Februar 2006 10:21
von MOAS
danke dirk,
ich werd's mir gleich anschauen. ich geb dann nochmal bescheid, wenn's funktioniert.
mfg Heiko
Verfasst: 6. Februar 2006 11:59
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)
Verfasst: 6. Februar 2006 13:12
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