boundingRect für painter.drawText()

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Hase
User
Beiträge: 100
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Hallo,

ich mache gerade meine ersten Schritte mit Qt.

Problem: ich habe mir ein graphicsItem erstellt. Es besteht aus ein paar Linien und Text (1-3 Zeichen).
Das funktioniert soweit auch, aber das boundingRect stimmt leider nur so ungefähr, weil die Textlänge erst zur Laufzeit fest steht.
Wenn das Item in eine scene() eingefügt wird, wird auch zuerst das boundingRect aufgerufen, erst danach der painter.

Wie und wo ermittelt man unter diesen Umständen ein boundingRect für painter.drawText() ? Geht das nur lowlevel über die fontmetric?

Code: Alles auswählen

class SummeAsphaltItem(QtGui.QGraphicsItem):
    def __init__(self, top, summe):
        QtGui.QGraphicsItem.__init__(self)
        self.summe=summe #string
        self.top=top
    def boundingRect(self):
        return QtCore.QRectF(30,self.top-15,50,15) #fix me

    def paint(self, painter, option, widget=None):
        font = QtGui.QFont('Helvetica', 10, QtGui.QFont.Normal)
        painter.drawLine(30,self.top,55,self.top)
        painter.setFont(font)
        summe=u'Σ %s'%self.summe
        painter.drawText(56,self.top, summe)
Danke!
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Jepp, das geht über QFontMetrics, da kannst Du für einen gegebenen String und gegebene Schrift das Rechteck berechnen lassen. (Ist aber eher high level, da es Dir die Beachtung unterschiedl. Glyphengrößen abnimmt ;) )
Hase
User
Beiträge: 100
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Ja, danke, das war's.

Qt ist schon irgendwie faszinierend. Einerseits kann man mit wenigen Zeilen schon ziemlich ausgefeilte GUI erstellen, andererseits ist der Funktionsumfang derart riesig, dass man (oder zumindest ich) eine halbe Ewigkeit braucht, um die Möglichkeiten zu überblicken.
Antworten