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 return QFontDatabase::systemFont(QFontDatabase::GeneralFont);
63 if (fontName.isEmpty()) {
70 fontSize = systemFont.pointSize();
72 fontSize = systemFont.pixelSize();
75 return QFont(fontName, fontSize);
93 font.setHintingPreference(QFont::PreferFullHinting);
103 if (font.pixelSize() == -1) {
104 font.setPointSizeF(font.pointSizeF() * ratio);
106 font.setPixelSize(qRound(font.pixelSize() * ratio));
111#if defined(Q_OS_WIN) && QT_VERSION < 0x060000
114static int defaultVerticalDPI()
116 static int vDPI = -1;
118 if (HDC defaultDC = GetDC(0)) {
119 vDPI = GetDeviceCaps(defaultDC, LOGPIXELSY);
120 ReleaseDC(0, defaultDC);
130QFont::Weight weightFromInteger(
int weight)
136 return QFont::ExtraLight;
142 return QFont::Normal;
145 return QFont::Medium;
148 return QFont::DemiBold;
154 return QFont::ExtraBold;
160static QFont LOGFONT_to_QFont(
const LOGFONTW& logFont)
162 const int verticalDPI_In = defaultVerticalDPI();
163 QFont qFont(QString::fromWCharArray(logFont.lfFaceName));
164 qFont.setItalic(logFont.lfItalic);
165 if (logFont.lfWeight != FW_DONTCARE) {
166 qFont.setWeight(weightFromInteger(logFont.lfWeight));
168 const qreal logFontHeight = qAbs(logFont.lfHeight);
169 qFont.setPointSizeF(logFontHeight * 72.0 / qreal(verticalDPI_In));
170 qFont.setUnderline(logFont.lfUnderline);
171 qFont.setOverline(
false);
172 qFont.setStrikeOut(logFont.lfStrikeOut);
177static QFont windowsSystemUiFont()
180 NONCLIENTMETRICSW ncm;
181 ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSW, lfMessageFont) +
sizeof(LOGFONTW);
182 SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, ncm.cbSize , &ncm, 0);
183 const QFont systemFont = LOGFONT_to_QFont(ncm.lfMessageFont);