我有一个Qt应用程序,我需要调整应用程序(缩放/缩小),因为显示设置中的操作系统发生了缩放的变化。
我从互联网上读到:
新闻部的标准设置为100% (96 DPI)、125% (120 DPI)和150% (144 DPI)
但是,当我从Qt应用程序中登录时,我会得到以下DPI值:
标度-物理新闻部X-物理新闻部Y
100% - 158,159
125% - 158,159
150% - 79,79
175% - 79,79
因此,根据上述值,应用程序文本大小对于100%和125%的标度没有差别。同样的行为适用于150%和175%。
下面是我使用的Qt代码:
#include <QWidget>
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QWidget widget;
qInfo() << "Hello Qt";
int dpiX = widget.physicalDpiX();
int dpiY = widget.physicalDpiY();
qInfo() << dpiX;
qInfo() << dpiY;
有人能指点一下吗?我试图实现的是,Qt应用程序的行为(更改应用程序大小/字体大小)取决于OS的显示设置中的缩放设置。
发布于 2019-04-09 09:25:37
我最初建议在这个答案中使用QWindow::devicePixelRatio()
。但是,从QT5.12开始,这实际上还不能正常工作。Qt将避免因Qt的UI缩放实现中的错误而产生的比例比例。因此,对于125%,它仍将返回1.0缩放因子。在175%,它将返回2.0,而不是1.75。
所以现在,你应该回过头来询问新闻部。但是,查询逻辑DPI,而不是像现在这样查询物理DPI。将对physicalDpi()
函数的调用替换为调用logicalDpi()
函数。这将给您提供Microsoft Windows报告的96/120/144 DPI标准。
一旦Qt修复了错误,下面答案的前一部分就可以使用了。
以前的答案,一旦Qt修复了它们的缩放错误,就适用了。
直接查询缩放比率,不要试图从DPI推断它。您可以使用QWindow::devicePixelRatio()
进行此操作。在100%缩放时,这将返回1.0。在125%的比例,它将返回1.25。诸若此类。因为这是一个缩放因子,所以您可以使用它作为您大小的乘数。
您应该在小部件当前所在的窗口上调用devicePixelRatio()
。这是因为在多监视器设置上,不同的窗口可以显示在不同的显示器上。
小部件所在的窗口可以通过QWidget::windowHandle()
获得。如果小部件不是窗口,则可以返回null。因此,您可能应该编写一个小助手函数,为小部件返回正确的DPR ()。它应该使用一个QWidget作为参数,如果windowHandle()
为小部件返回null,那么沿着父树前进,对每个父树调用windowHandle()
,直到找到第一个不返回null的父树。然后返回windowHandle()->devicePixelRatio()
。这将是在该小部件中使用的正确的DPR。
https://stackoverflow.com/questions/55588776
复制相似问题