【发布时间】:2018-04-19 01:11:52
【问题描述】:
我的印象是,如果您在应用程序中这样做
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication* app = new QApplication(temp, NULL);
然后字体会在高分辨率显示器上自动放大。如果您在 Windows 10 中显式增加字体缩放(设置-->系统->自定义缩放),则相同。
但是,在 Windows 10 中以 100% 和 200% 缩放运行以下代码时,它不会返回两倍大小。
QFont font = QFont("arial", 10);
QFontMetrics fm(font);
int width = fm.width("abcdefgABCDEFG");
奇怪的是只有1个像素的差异。
100% --> width = 108 pixels
200% --> width = 109 pixels
这是为什么呢?我可以让 QFontMetrics 考虑 Windows 缩放吗?还是我需要使用逻辑/物理 DPI 来推断字体大小必须增加 2 倍?
谢谢
【问题讨论】:
-
这只是您的 Qt 应用程序预先运行的模式:stackoverflow.com/questions/39823918/…
-
对@AlexanderVX,我应该提到我启用了自动 HighDPI 缩放
-
那么问题是“为什么会这样?我需要自己计算文本的缩放大小吗?”回答?不,操作系统正在处理适当的缩放。那就别打扰了。您还有其他问题吗?
-
它确实放大了 Qt 绘制的所有内容(标签、组合框、表格视图......)。但我的应用程序还包括一个 OpenGL 小部件,我们在其中绘制标签。我们使用 QPainter 在图像中绘制文本。虽然当我增加缩放比例时整个应用程序字体似乎加倍,但使用 QPainter 生成的那些标签却没有。
-
检查
QScreen::physicalDotsPerInch是否与实际分辨率成比例变化。我现在在没有适当的高 Dpi 支持的 Linux 系统上,但这应该可以工作。这可能取决于 Qt 平台的实现。
标签: qt scaling dpi qfontmetrics qfont