QFontDatabase/QFont question

Maurizio Berti maurizio.berti at gmail.com
Mon Jan 6 04:11:01 GMT 2025


First of all, this almost certainly is a Qt issue, not a PyQt one.
Then, you have to consider at least the following aspects:

- font management and rendering is a quite complex aspect, and its results
may change *a lot* depending on the platform;
- fonts are not always consistent, depending on many aspects;
- font matching follows arbitrary rules (some of which are based on text
matching of families or properties);
- the [infamous] 6.7 version introduced many changes and related
bugs/inconsistencies, including font management, which got important
changes (see this related post
<https://www.qt.io/blog/text-improvements-in-qt-6.7>);
- if you have many fonts installed, the font matching algorithm may have
issues especially if you installed different versions of the "same" font
(start by checking how many fonts you've installed that match the "exo"
family name); using installed fonts along with ones added through
QFontDatabase may further complicate things;

My suggestion is to check again with a *clean* setup (possibly through
multiple VMs, OSs and configurations) and eventually consider filing a
detailed report on https://bugreports.qt.io.

Regards,
MaurizioB

Il giorno lun 6 gen 2025 alle ore 00:09 John Sturtz <john at sturtz.org> ha
scritto:

> Hi again.
>
> Wondering if anyone can help me understand this behavior that, to me, is
> unexpected.
>
> I'm using QFontDatabase to manipulate system fonts.  Mostly it seems to
> work great, and behaves as I expect.  I especially like its handy .font()
> method, that returns a QFont object.
>
> But in this instance, it's behaving in a way I don't understand.  I'm
> working with a Google font named Exo (
> https://fonts.google.com/specimen/Exo), which I've installed on my
> system.  QFontDatabase.styles('Exo') produces several (18, to be exact)
> styles.  Screenshot from Windows Font Settings below:
>
>
> Now what I want to do is create a QFont object of the 'Bold' style, and
> then just make it Italic.  For example:
>
> font = QFontDatabase.font('Exo', 'Bold', 24)
> font.setItalic(True)
>
>
> But after the .setItalic() call, the font object is no longer Bold
> anymore (it's Thin, the lightest weight of the Exo fonts).
>
> Sample code is attached (I guess one would have to install the Exo font to
> test it).  Basically, I get the font with QFontDatabase.font(), get and
> display QFontInfo data for it, and it's what I expect.  Then I get the
> same font again, call .setItalic(True) on it, display QFontInfo, and it's
> *not* what I expect:
>
>
> I do (sort of) understand that the object returned by QFont is *requested,
> *and QFontInfo tells you what you actually got.  Apparently I didn't get
> what I requested, but I'm not quite sure why.
>
> As always, thanks in advance if you can shed any light on this!
>
> /John
>


-- 
È difficile avere una convinzione precisa quando si parla delle ragioni del
cuore. - "Sostiene Pereira", Antonio Tabucchi
http://www.jidesk.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20250106/c82515a7/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Exo fonts.png
Type: image/png
Size: 69551 bytes
Desc: not available
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20250106/c82515a7/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sample code output.png
Type: image/png
Size: 32738 bytes
Desc: not available
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20250106/c82515a7/attachment-0003.png>


More information about the PyQt mailing list