Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Font styles issues in QFontDatabase



  • When I am generating style lists for my font picking widget, I get localised strings,

        QStringList familyBuf = dispSettings->fdb.families(QFontDatabase::Latin);
        for (int i = (familyBuf.length() - 1); i >= 0; i--)
            if (!dispSettings->fdb.isPrivateFamily(familyBuf.at(i)))
                if (dispSettings->fdb.isSmoothlyScalable(familyBuf.at(i)))
                    if (QFontInfo(QFont(familyBuf[i])).family() == familyBuf.at(i)) {
                        QString buf = familyBuf.at(i);
                        fontFamilies.append(buf);
                        stylesPack.insert(std::make_pair(buf, dispSettings->fdb.styles(buf)));
    

    but when I am trying to get current style from font via QFontInfo+QFontDatabase, to generate initial GUI state, I suddenly recieve non-localized style string.

     currStyle = dispSettings->fdb.styleString(fontInfo);
    

    In Windows 7+ Qt5.7 QFontDatabase generated non-localized font strings, so there was no issues. How do I work around this mismatch in the Qt5.15+?


  • Lifetime Qt Champion

    Hi
    Is this on win 7 + Qt5.15 ?



  • Hi.
    No, the first system is w7+Qt5.7, the second is w10+Qt5.15.


  • Lifetime Qt Champion

    @SiO2
    Hi
    Would it be possible to try Qt5.7 on the win 10 to verify it is indeed something that changed
    from 5.7 to 5.15 and not something that changed from win 7 -> win 10 ?



  • Checked w10+Qt5.7. It is Qt changes that cases issues.


  • Lifetime Qt Champion

    Hi
    Ok so its either a bug (regression) or some changes in QFontInfo.
    I could not locate any change log for QFontInfo but maybe others have an idea.



  • QFontInfo behave the same way in both Qt5.7 and Qt5.15. It is QFontDatabase gives localized style strings in the newer version. What I need is a way to extract stylestring from current font in a way matching QFontDatabase behaviour, i.e. localized one.



  • It is worse in fact

    QFontDatabase::styleString(const QFontInfo &fontInfo) //"Normal"
    

    mismatch

    QStringList QFontDatabase::styles(const QString &family)   //"Обычный", "Полужирный" 
    

    so this class essentially breaks its own logic. Also default font keeps those localized stylestring even after me giving up localization via

    QLocale::setDefault(QLocale::English);
    

    std::map<QString, QStringList> stylesPack


Log in to reply