[PyQt] Problem with boundingRect in PyQt snapshot

Phil Thompson phil at riverbankcomputing.com
Wed Sep 16 20:54:04 BST 2009


On Wed, 16 Sep 2009 20:04:48 +0100, Jeremy Sanders
<jeremy at jeremysanders.net> wrote:
> Hi - for some reason the following code does not produce the 
> correct answer after updating PyQt.
> 
> On Ubuntu with the PyQt 4.4.4 package the following returns 
> 18.0
> 
> from PyQt4.QtGui import *
> from PyQt4.QtCore import *
> import sys
> 
> app = QApplication(sys.argv)
> 
> pix = QPixmap(128, 128)
> p = QPainter(pix)
> font = QFont("Times New Roman", 20)
> 
> fm = QFontMetricsF(font, p.device())
> print fm.boundingRect(QChar('0')).height()
> 
> On the same system with the same Qt (4.5.0), PyQt-x11-
> gpl-4.6-snapshot-20090906 and returns 32.0!
> 
> The text is misaligned when using height to align it using 
> the snapshot.
> 
> My guess is that the QChar is being promoted to QString. This 
> function returns a different result for QString, so it breaks 
> my code. The QString version returns the font height, not the 
> height of the character given.

Your guess is correct.

You could use tightBoundingRect() instead.

I can back out the automatic conversion from QChar to QString, but that
leaves the question of what should happen with v2 of the QString API, ie.
should QChar not be dropped?

Phil


More information about the PyQt mailing list