Qt QFontMetrics能否解释windows dpi扩展?

Qt QFontMetrics能否解释windows dpi扩展?,qt,scaling,dpi,qfontmetrics,qfont,Qt,Scaling,Dpi,Qfontmetrics,Qfont,我的印象是,如果你在申请中这样做 QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication* app = new QApplication(temp, NULL); 然后字体在高分辨率显示器上自动放大。如果在Windows 10设置->系统->自定义缩放中显式增加字体缩放,则相同 但是,在Windows10中以100%和200%的比例运行以下代码时,它不会返回两倍的大小 QFont font = QFont

我的印象是,如果你在申请中这样做

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication* app = new QApplication(temp, NULL);
然后字体在高分辨率显示器上自动放大。如果在Windows 10设置->系统->自定义缩放中显式增加字体缩放,则相同

但是,在Windows10中以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倍


感谢

为自定义绘制项目提供了正确的缩放比例。请使用属性实现缩放系数,以应用于实际图形:

qreal myScale = pScreen->physicalDotPerInch() / constStandardPerInch;

另外,这个问题还需要修改。

这只是关于Qt应用程序运行的预处理模式:对@AlexanderVX,我应该提到我启用了自动高dpi缩放。问题是为什么?我需要自己计算文本的缩放大小吗?回答?不,操作系统正在进行适当的扩展。那就不用麻烦了。你还有其他问题吗?它确实放大了Qt标签、组合框、表格视图……绘制的所有内容。。。。但我的应用程序还包括一个OpenGL小部件,我们在其中绘制标签。我们使用QPainter在图像中绘制文本。虽然当我增加缩放比例时,整个应用程序的字体似乎翻了一番,但使用QPaint生成的标签却没有。请检查QScreen::physicalDotsPerInch是否与实际分辨率成比例地变化。我现在在Linux系统上,没有适当的高Dpi支持,但这应该可以工作。这可能取决于Qt平台的实现。您给出的答案是错误的。PhysicalDotsPrinch是常数,取决于视频驱动程序报告的监视器大小。为了找到比例因子,需要使用logicalDotsPerInch除以96 DPI。96 DPI之所以被选为100%刻度,我猜是因为历史原因——是微软的,而今天与真正的DPI无关。自Qt5.4以来,有一个选项可以通知windows manager您的应用程序了解显示缩放。现在,它是默认值,字体的比例也正确。在5.9 QFontMetrics::width中,返回正确的像素值。我不想去编辑您的答案,为了正确性,请自己动手。声明系统正在缩放字体也是模糊的-这是字体渲染器的工作,不需要是系统一。完整性72.272点=254 mm=1'。我无法计算用于在屏幕上呈现字体的DPI比例,但可以肯定的是,使用logicalDPI作为等式的一部分。