如何解释 QFontMetrics 结果?

Posted

技术标签:

【中文标题】如何解释 QFontMetrics 结果?【英文标题】:How to interpret QFontMetrics results? 【发布时间】:2018-01-09 18:50:36 【问题描述】:

我无法理解从 QFontMetrics 获得的值

// 43 characters        0123456789012345678901234567890123456789012
static const QString s("The quick brown fox jumps over the lazy dog");
// Hint: basically returns w->fontMetrics(); with w being my main application window
const QFontMetrics fm = CGuiUtility::currentFontMetrics();
const int w = fm.width(s);
const int h = fm.height();
return QSize(w, h);

我得到以下屏幕分辨率:

    ) 1920/1080: 256/16 ) 3840/2160: 178/10 高 DPI 支持 qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1") ) 3840/2160: 536/32 不支持高 DPI

我的理解是我确实得到了像素宽度/高度。我想知道为什么我在雇佣决议时会得到这么低的身高(见 2)。我宁愿期望它反过来 - 使用更多像素。

我可以看到,在 1 和 3 之间(几乎)存在因子 2,这是有道理的。但是随后(使用 3,不支持 DPI)UI 不可读(由于高 DPI 屏幕太小)。那么 2 是如何适应的,结果有些奇怪。

是否有人能够对这些值的解释给出提示?

备注:与Style sheets / Qt Designer support for high dpi screens?相关我试图找到的是我的UI窗口在不同分辨率/平台上的合理宽度/高度


我明白了。使用 1280/780 的“虚拟屏幕”,使用 hi-dpi Qt 以 1:3 的比例缩放。我想知道我是否可以手动调整像素比率。就我而言,它是通过设置qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1") 来实现的。是否有机会将其设置为 2:1?

    ) "桌面 w1920 w1080 - 比率:1 | 80 个字符:w560 h16 | 43 个字符:w256 h16" ) "桌面 w1280 w720 hi DPI 比率:3 | 80 个字符:w400 h10 | 43 个字符:w178 h10" ) "桌面 w3840 w2160 - 比率:1 | 80 个字符:w1200 h32 | 43 个字符:w536 h32"

【问题讨论】:

什么是CGuiUtility::currentFontMetricsF() Google 没有向我显示任何 QT 结果,它通常会在第 1 页顶部找到 QT 文档? 如提示中所说,它是一个小型实用程序函数,它找到我的主应用程序窗口,然后返回该窗口的w->fontMetrics()。所以它是主应用程序窗口的字体度量。 尝试查看qDebug() << QApplication::desktop()->screenGeometry(pMyWidget).size(); 以了解该特定模式。 每种情况下的w->devicePixelRatioF() 是什么? 你的 Qt 版本是什么?版本之间的 HiDpi 支持变化很大。 【参考方案1】:

根据 AlexanderVX 和 SteackOverflow 的提示,现在很清楚了。

    “桌面 w1920 w1080 - 比率:1 | 80 个字符:w560 h16 | 43 个字符: w256 h16" "桌面 w1280 w720 hi DPI 比率:3 | 80 个字符:w400 h10 | 43 个字符:w178 h10" “桌面 w3840 w2160 - 比率:1 | 80 个字符: w1200 h32 | 43 个字符:w536 h32"

因此我关闭主题

【讨论】:

以上是关于如何解释 QFontMetrics 结果?的主要内容,如果未能解决你的问题,请参考以下文章

QFontMetrics boundingRect

Qt 浅析QFontMetrics 获取字体宽度,高度

Qt 浅析QFontMetrics 获取字体宽度,高度

为啥 QFontMetrics 提供的宽度与 Qml Rectangle/Text 显示的宽度不匹配

如何公平地比较基线和 GridSearchCV 结果?

java ListRemoveElementEqualtoGivenParametre