45#if defined(Q_OS_WIN) && QT_VERSION < 0x060000
46static QFont windowsSystemUiFont();
51#if defined(Q_OS_WIN) && QT_VERSION < 0x060000
52 return windowsSystemUiFont();
54 QFont font = QFontDatabase::systemFont(QFontDatabase::GeneralFont);
56 if (font.pointSizeF() == -1) {
57 font.setPointSizeF(font.pixelSize());
68 if (fontName.isEmpty()) {
75 return QFont(fontName, fontSize);
93 font.setHintingPreference(QFont::PreferFullHinting);
101 font.setPointSizeF(font.pointSizeF() * 0.9);
105#if defined(Q_OS_WIN) && QT_VERSION < 0x060000
108static int defaultVerticalDPI()
110 static int vDPI = -1;
112 if (HDC defaultDC = GetDC(0)) {
113 vDPI = GetDeviceCaps(defaultDC, LOGPIXELSY);
114 ReleaseDC(0, defaultDC);
124QFont::Weight weightFromInteger(
int weight)
130 return QFont::ExtraLight;
136 return QFont::Normal;
139 return QFont::Medium;
142 return QFont::DemiBold;
148 return QFont::ExtraBold;
154static QFont LOGFONT_to_QFont(
const LOGFONTW& logFont)
156 const int verticalDPI_In = defaultVerticalDPI();
157 QFont qFont(QString::fromWCharArray(logFont.lfFaceName));
158 qFont.setItalic(logFont.lfItalic);
159 if (logFont.lfWeight != FW_DONTCARE) {
160 qFont.setWeight(weightFromInteger(logFont.lfWeight));
162 const qreal logFontHeight = qAbs(logFont.lfHeight);
163 qFont.setPointSizeF(logFontHeight * 72.0 / qreal(verticalDPI_In));
164 qFont.setUnderline(logFont.lfUnderline);
165 qFont.setOverline(
false);
166 qFont.setStrikeOut(logFont.lfStrikeOut);
171static QFont windowsSystemUiFont()
174 NONCLIENTMETRICSW ncm;
175 ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, lfMessageFont) +
sizeof(LOGFONTW);
176 SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, ncm.cbSize , &ncm, 0);
177 const QFont systemFont = LOGFONT_to_QFont(ncm.lfMessageFont);