On Thu, 17 Sep 2009, Phil Thompson wrote:

On Thu, 17 Sep 2009 11:39:09 +0100, Mark Summerfield <[email protected]>
wrote:
On 2009-09-16, Phil Thompson wrote:
On Wed, 16 Sep 2009 20:04:48 +0100, Jeremy Sanders

<[email protected]> 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?

I think it would be a pity to keep it. Most of its methods are available
in Python anyway, and for those few that aren't couldn't you provide
some static methods that either take a one character string or that only
consider the first character?

Do you want to go through the whole API and tell me the functions that
behave slightly differently given a QChar rather than a QString of length
one?

I don't have a problem with keeping it - it is a very specialised class and
you'd only use it if you really needed to.

I think it is probably necessary to keep it. You could check for a single character string, but this will break the use cases where you expect the function to work for any number of characters in the same way. For a string it should give height(), not the real bounding box of the character.

It's a shame they used the same function name for both operations.

An alternative would be to have a second function, say boundingRect_char for the specialsed case. This might break existing apps (like mine) that currently depend on QChar working. THere probably aren't too many of those.

Jeremy

--
Jeremy Sanders <[email protected]>
http://www.jeremysanders.net/                Cambridge, UK
Public Key Server PGP Key ID: E1AAE053
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to